gpt4 book ai didi

c - Linux 中的周期性任务

转载 作者:可可西里 更新时间:2023-11-01 11:46:24 28 4
gpt4 key购买 nike

我想编写一个 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) 这样的多路复用系统调用。 (另见 thisthat 答案)。许多库提供事件循环,特别是 libevent , libev , Gtk/Glib, Qt, ...

在 Linux 上,您可能timerfd_create(2)感兴趣(除了其他更传统的解决方案之外)。

并阅读 Advanced Linux Programming

关于c - Linux 中的周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446969/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com