2010-07-02 4 views
1

마이크로 세컨드의 해상도로 여러 날 동안 스레드를 잠자기 상태로 둘 수있는 방법이 있습니까? usleep는 스레드를 1000000 동안 잠자기 상태로 둘 수 있으며 sleep은 두 번째 단계에서 작동합니다. 이것을 달성하기 위해 수면과 잠을 모두 쓸 수있는 방법이 있습니까?마이크로 초의 해상도로 여러 날 잠을 자다

+1

usleep에는 마이크로 세컨드 세분성이 없습니다. usleep() 함수는 (적어도) usec 마이크로 초 동안 호출 프로세스의 실행을 일시 중단합니다. 잠은 임의의 시스템 활동 또는 호출을 처리하는 데 걸리는 시간 또는 시스템 타이머의 세분성에 의해 약간 길어질 수 있습니다. – Sjoerd

+2

시스템 시계는 일 단위로 마이크로 초 단위로 쉽게 표류 할 수 있으므로 사용 가능한 방법이 있어도 정확하지 않을 수 있습니다. – drawnonward

+10

마이크로 초 해상도로 며칠 동안 잠을 자면 어떤 일이 일어날 지 궁금합니다. – ereOn

답변

5

아직 일어날 시간은 아니지만 :

  • 확인 당신이 깨워 할 때보다 약간 짧은 잠을 현재 시간
  • 이동합니다.

이렇게하면 깨우기를 원하는 시간에 도달하면 주기적으로 시간을 확인하고 점점 더 빠르고 세부적으로 확인할 수 있습니다.

+0

내 스레드를 깨우기 위해 신호를 기다리는 경우 어떻게해야합니까? – lies

+0

@lies 신호를 기다리는 중 왜 잠이 필요합니까? 메시지 큐 사용 – Gianluca

+1

@lies : 질문에 의도 한 용도를 게시하면 대개 도움이됩니다. * 수면 *보다 더 나은 대안이있을 수 있지만 잠자는 것에 대해서만 묻는다면 그 정보를 얻지 못할 것입니다. * '네가 어디로 가는지 알지 못한다면 조심하라. 왜냐하면 네가 거기에 가지 못할지도 모르기 때문이다.'- 요기 베라 –

5

수면 시간을 여러 번 나누면됩니다.

int64_t time_to_sleep = ...; 
int peroid_to_sleep = ...; 
while(time_to_sleep > 0) 
{ 
    usleep(period_slept); 
    time_to_sleep -= period_slept; 
} 
+4

... 더 많은 표류를 드리십시오. 만약 당신이 이것을하려고한다면, 초의 정수 부분에 대해서는'sleep()'을, 나머지 시간 동안은'usleep()'를 사용하는 것이 더 낫습니다. –

관련 문제