我正在为Mac编写一个命令行实用程序,它应该每秒打印出状态信息。显然,我不想每秒轮询数十亿次。我能想到的另一种方法是获取当前时间并使用select等待差异。还有更好的方法吗?
答案 0 :(得分:4)
你做的任何等待都保证至少等待那段时间,而不是完全等待。 OSX不是一个实时操作系统 - 我认为没有办法保证这样的东西。
如果你只想估计它,那么就可以了解现在和你想要的时间之间的差异(可能会少一些时间来记录日志)。
答案 1 :(得分:1)
通常使用计时器调度方法可以解决问题。无论如何要记住,使用简单的计时器,精度并不是最好的。
答案 2 :(得分: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不支持这种用法。