c - Linux 中的周期性任务

标签 c linux multithreading timer

我想编写一个 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/

相关文章:

fork() 和 execl() 调用后无法识别 C++ 命令 (Linux)

linux - ip xfrm state add 中选择器的用途

multithreading - 使用 angularJS 应用程序提高 Symfony2 的性能

c - c中的字节操作

c - c中的二进制转十进制

c# - 尝试将 StreamWriter 打开到命名管道时 Mono 挂起

java - 下面两个多线程java代码有什么区别?

c++ - 进程大小在多线程应用程序中增长

c - 什么是 VLA 类型的表达式?

c - 返回指向局部变量的指针