我想编写一个 C 程序来定期执行某些任务(例如,在控制台上打印一些内容)。
我已经使用 nanosleep 实现了它,如下所示。每 500 毫秒调用函数“func”。
#include <stdio.h>
#include <time.h>
void func(void);
int main()
{
struct timespec mytimespec;
mytimespec.tv_sec = 0;
mytimespec.tv_nsec = 500000000; /* 500 ms */
while(1)
{
func();
nanosleep(&mytimespec,NULL);
}
return 0;
}
void func(void)
{
printf("This would be printed periodically\n");
}
以上工作正常。但是我有一些疑问:-
如果有多个线程,一个线程依赖
nanosleep
做周期性任务,是否能正常工作?有没有办法在 Linux 中生成一个周期性线程?或者,使用一些定时器回调?
最佳答案
你应该阅读 time(7) (也许 signal(7) ...)。你可能想要一些 event loop (至少如果你的程序正在做一些输入)。该循环基于像 poll(2) 这样的多路复用系统调用。 (另见 this 和 that 答案)。许多库提供事件循环,特别是 libevent , libev , Gtk/Glib, Qt, ...
在 Linux 上,您可能也对timerfd_create(2)感兴趣(除了其他更传统的解决方案之外)。
关于c - Linux 中的周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446969/