2011-01-10 6 views
2

매초마다 상태 정보를 출력해야하는 Mac 용 명령 줄 유틸리티를 작성했습니다. 분명히, 나는 1 초에 수천 번 폴링하고 싶지 않다. 내가 생각할 수있는 유일한 다른 방법은 현재 시간을 가져 와서 차이를 기다리는 것을 선택하는 것입니다. 더 좋은 방법이 있습니까?초당 한 번 코드를 실행할 수 있습니까?

답변

4

기다리는 시간은 적어도 그 시간만큼 기다리는 것이지 정확하지는 않습니다. OSX는 실시간 운영체제가 아닙니다. 그런 것을 보장 할 방법이 없다고 생각합니다.

견적을 원하는 경우 지금과 원하는 시간 사이의 차이를 자고 (아마도 로그 시간을 줄이는 데 조금 시간이 걸릴 수 있습니다) 작동합니다.

1

일반적으로 타이머를 사용하여 메소드를 예약하는 것이 트릭입니다. 그러나 기억해야 할 중요한 것은, 정밀도는 단순한 타이머로는 최선이 아니라는 것입니다.

1

는 여기에 내가 무엇을 : 그것은 충분해야한다에 "안구"정밀, 작동

#import <stdlib.h> 
#import <stdio.h> 
#import <time.h> 
#import <sys/time.h> 

#define TIME_LENGTH 9 

int main() 
{ 
    struct timeval now; 
    struct timespec wait; 

    time_t seconds; 
    char str[TIME_LENGTH]; 

    wait.tv_sec = 0; 

    for (;;) { 
     gettimeofday(&now, NULL); 
     wait.tv_nsec = (1000000 - now.tv_usec) * 1000; 
     nanosleep(&wait, NULL); 

     seconds = now.tv_sec+1; 
     strftime(str, TIME_LENGTH, "%T", localtime(&seconds)); 
     puts(str); 
    } 
} 

. 내장 된 메뉴 바 시계와 동기화되어 업데이트 된 것처럼 보입니다. 분명히, time.h, clock_nanosleep에 시간이 있기까지 기다릴 수있는 함수가 있지만,이 사용법은 Mac에서는 지원되지 않습니다.

관련 문제