2011-01-10 19 views
2

私はMac用のコマンドラインユーティリティを書いていました。これは秒ごとにステータス情報を表示するはずです。明らかに、私は毎秒何千回も投票したくない。私が考えることができる唯一の他の方法は、現在の時間を取得し、選択を使用して差を待つことです。より良い方法がありますか?1秒に1回、2回に1回コードを実行できますか?

答えて

4

待っていると、少なくともその時間は待っていることが保証されています。 OSXはリアルタイムOSではありません。そのようなことを保証する方法はないと思います。

推定したいだけなら、現在とあなたが望む時間との差を寝かせます(おそらくログの時間を与えるのに少し時間がかかります)。

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ではサポートされていません。

関連する問題