2010-07-01 3 views

답변

24

sleep (3)은 지정된 시간 (초) 동안 호출 스레드를 일시 중단하려고 시도하는 posix 표준 라이브러리 방법입니다. usleep (3)은 마이크로 초 단위로 시간이 걸리는 것을 제외하고는 똑같습니다. 둘 다 실제로 nanosleep (2) 시스템 호출로 구현됩니다.

마지막 방법은 C 라이브러리 호출이 아닌 Foundation 프레임 워크의 일부인 점을 제외하면 똑같은 작업을 수행합니다. NSTimeInterval은 잠자기 시간을 초를 나타내는 double과 초의 1 분수로 나타냅니다.

모든 의도와 목적을 위해, 이들은 모두 기능적으로 동일한 것으로, 즉 지정된 시간 동안 호출 스레드를 일시 중단하려고 시도합니다.

19

이러한 방법을 사용하는 가장 좋은 조건은 무엇입니까?

결코

또는, 정말 거의 거의 확실히 결코 이제까지 외부 상황의 가장 독특한 중.

무엇을하려하십니까?

+9

하지만 빌, 나는 여기 몇 분 동안 자고있는 것을 발견하고 설명 할 수없는 EXC_BAD_ACCESS 충돌을 모두 해결합니다! –

+7

ㅎ.나는 "스레드 동기화"목적으로'usleep()'을 사용하는 코드를 보았습니다. 내 멍청한 근육이 슬프게 아프다. – bbum

+1

나는 당신이 의미하는 바를 정확하게 알고 있습니다. 이 경우에 나는 미소 짓는 근육보다는 운동을하기를 바랬다. –

3

대부분의 OS에서 sleep (0) 및 그 변형을 사용하면 폴링 상황에서 효율성을 개선하여 스레드 스케줄러가 폴링 스레드를 깨우기로 결정할 때까지 다른 스레드에게 작업 기회를 제공 할 수 있습니다. full-on while 루프를 능가합니다. 제로가 아닌 타임 아웃을 많이 사용하지는 않았지만, 특히 애플은 어쨌든 대부분의 상황에서 폴링의 필요성을 제거해야하는 이벤트 기반 아키텍처를 구축하는 데 매우 능숙했습니다.

-1

- 수면 사용은 다음과 같은 상태입니다 :

네트워크 시뮬레이션 시나리오에서, 우리가 일반적으로 스케줄러를 사용하여 이벤트에 의해 이벤트가 실행되는 이벤트가 있습니다. 스케줄러는 순서대로 이벤트를 실행합니다. 이벤트가 실행을 끝내고 스케줄러가 다음 이벤트로 이동하면 스케줄러는 다음 이벤트 실행 시간을 시스템 클럭과 비교합니다. 다음 이벤트가 이후 시간으로 예정되어 있다면 시뮬레이터는 실시간에 도달 할 때까지 잠자고 다음 이벤트를 실행합니다.

-부터 리눅스 남자 페이지 :

usleep() 기능은 (적어도) (마이크로 초) 마이크로에 대한 호출 스레드의 실행을 일시 중단합니다. 시스템 활동이나 호출 처리에 소요되는 시간 또는 시스템 타이머의 세분화에 따라 잠자기 시간이 약간 길어질 수 있습니다. 잠시은 작업의 실행을 지연시키고 있습니다 (스레드 또는 기타 일 수 있음). 기능에 대한 자세한 내용은 12을 참조하십시오.