如何在C ++中编写周期性任务的程序

时间:2015-03-05 09:22:14

标签: c++

在Linux下用C ++开发计时器API。 我想定期调用任务,如何创建计时器,我可以使用它来为某些特定任务调用API。我已经在qt中使用了Qtimer。但需要使用标准C库来实现。 抱歉英语....

2 个答案:

答案 0 :(得分:0)

这个问题有很多可能的答案。

  1. 如果您习惯Qt,请使用Qt。
  2. 如果你想要一个C答案,你可以sleep() - 见this question,虽然你已经标记了你的问题C ++而不是 下进行。
  3. 如果您想要C或C ++答案,可以使用线程。
  4. 您可以将您的任务编写为程序并运行其他内容 它在一个时间表中。
  5. 你没说多久。如果您只是需要每天或每小时发生一些事情,请让操作系统完成工作并使用cron
    如果你需要精确地开始每一秒,你就会陷入困境。除非您拥有专用机器,否则不会中断您的过程 如果你想在下一次开始时最后一块工作没有完成,会发生什么? 有什么需要知道这个的结果,还是只是向正在收听的人发送邮件?你需要知道任务是否完成甚至开始好吗?如果你的程序试图每五分钟做一次,如果它崩溃了你会怎么做?或者它运行的机器着火?

答案 1 :(得分:0)

使用Linux标准C库的setitimer( )

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>

void periodic_task  (int signum)
{
 static int count = 0;
 printf (" periodic task in C++ timer %d \n", ++count);
}

int main ()
{
 struct sigaction sa;
 struct itimerval timer;

 /* Install periodic_task  as the signal handler for SIGVTALRM. */
 memset (&sa, 0, sizeof (sa));
 sa.sa_handler = &periodic_task ;
 sigaction (SIGVTALRM, &sa, NULL);

 /* Configure the timer to expire after 250 msec... */
 timer.it_value.tv_sec = 0;
 timer.it_value.tv_usec = 250000;

 /* ... and every 250 msec after that. */
 timer.it_interval.tv_sec = 0;
 timer.it_interval.tv_usec = 250000;

 /* Start a virtual timer. It counts down whenever this process is    executing. */
 setitimer (ITIMER_VIRTUAL, &timer, NULL);

 /* Do busy work. */
 while (1);

}