如何使用 alarm() 或 sleep 每 1000 毫秒执行一次函数?如果函数未在 1000 毫秒内执行或完成,我希望程序执行其他操作。
编辑:添加伪代码
while(true) {
alarm(1000);
execute function;
sleep(1000);
alarm(0);
}
现在如果 alarm(1000) 发出 SIGALRM 信号,这是我可以调用其他函数的地方吗? 我是这类东西的新手,所以我什至不确定我是否正确使用它。
最佳答案
要求有多清晰,即您可以容忍多少抖动?
什么版本的 UNIX?
基本上,如果这是一个硬性截止日期——听起来像一个——你将需要做一些特殊的事情,因为基本的 UNIX 并不是真正的硬实时系统。
我们暂时假设您指的是 Linux。你会想要
这可能会做。如果您需要更细粒度或更可预测的计时,那么您可能需要编写一个内核扩展,它可以用内核计时器驱动。 (Solaris 对硬实时有一些改进的支持,但它仍然不是真正的硬实时系统。)
如果您可以使用实时 Linux 或 UNIX,生活会变得容易得多。这是一个 list of some options .这是一个 article you might find usefui.
更新
你还应该看看 nanosleep (2) 或 setitimer (2)。请注意,所有这些都表示间隔至少参数中的间隔。如果你有一个严格的截止日期,你需要等待比实际间隔少一些的时间,然后弄清楚如何处理千毫秒的任何变化。
关于C/UNIX 每 x 毫秒执行一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021955/