在c ++中每隔x秒运行一次函数

时间:2010-05-12 00:14:20

标签: c++ timer

我正在尝试用C ++构建一个feed阅读器,所以我需要该程序间歇性地检查新的feed。但是,用户仍然需要能够与程序进行交互,因此我似乎一直在寻找让系统等待的建议对我来说不起作用。任何人都可以建议一个更好的解决方案,比如一个在后台运行的计时器或什么?

谢谢, 查尔斯

5 个答案:

答案 0 :(得分:2)

您可以创建一个在特定时间段内休眠的线程。这与操作系统无关。或者,如果您在Windows中编程,则可以设置计时器以定期发送超时事件。计时器的使用取决于您的部署平台。

答案 1 :(得分:2)

您需要使用线程。在后台有一个线程做定时器,前台有一个线程与用户交互。然后在线程之间有一些共享内存区域,后台线程可以通过调用你的特定函数来修改它们;并且前景可以查看。也许请查看boost线程库:http://www.boost.org/doc/libs/1_43_0/doc/html/thread.html

答案 2 :(得分:2)

你可以使用SIGALRM每隔n秒进行一次中断。这不需要单独的线程。您的主线程将进入信号处理程序。

void sigtime(int signo)
{
    signal(SIGALRM, sigtime);
}
....
signal(SIGALRM, sigtime);
itimerval itm;
itm.it_interval.tv_sec=0;
itm.it_value.tv_sec = 0;
itm.it_interval.tv_usec = 200000;
itm.it_value.tv_usec = 200000;
setitimer(ITIMER_REAL,&itm,0);

这当然假设你正在使用类似unix的东西

答案 3 :(得分:1)

使UI和Feed阅读器分开。如果用户执行了需要立即更新Feed的操作,请中断Feed线程。

答案 4 :(得分:0)

对我来说,这听起来像是观察者设计模式的候选人:

http://en.wikipedia.org/wiki/Observer_pattern#C.2B.2B

生成一个线程,它将间歇性地检查feed,然后在主类/具体observor类中调用handleEvent方法。这样你的主类就不会处于等待状态。

相关问题