在Linux下用C ++开发计时器API。 我想定期调用任务,如何创建计时器,我可以使用它来为某些特定任务调用API。我已经在qt中使用了Qtimer。但需要使用标准C库来实现。 抱歉英语....
答案 0 :(得分:0)
这个问题有很多可能的答案。
sleep()
- 见this
question,虽然你已经标记了你的问题C ++而不是
下进行。你没说多久。如果您只是需要每天或每小时发生一些事情,请让操作系统完成工作并使用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);
}