0

我需要能够为 X 毫秒设置一个计时器,然后让它在它到期时调用一个函数。

我环顾四周,看到了一些使用 Boost\asio 的解决方案,但我无法使用 Boost。

理想情况下,我希望该解决方案可以在 Windows 和 Linux 上运行。这是一项艰巨的任务,我知道!

有谁知道我会怎么做?

编辑:程序是交互式的,所以我不能让线程进入睡眠状态。而且我宁愿不使用使用旋转的解决方案,即while(enough time hasn't elapsed) { }

4

2 回答 2

1

即使如此有用和简单,它也不是可移植的,Windows 和 Linux 使用不同的线程库,因此您必须编写如下内容:

#if defined WIN32
 // Timer for Windows: it uses SetTimer
#endif
#if defined __LINUX__
 // Timer for Linux: it uses settimer
#endif

这里写的代码不是那么短,所以在这里寻找 Windows 计时器。在 Windows 上,您可以考虑SetTimer()使用更简单的PostMessageDelayed(). 它将使用更少的资源。
对于 Linux,您可以编写如下内容:

void test_timer()
{
 signal(SIGALRM, alarm_handler);
 alarm(60); // 1 minute, granularity is 1 second
}

void alarm_handler(int signo)
{
 if (signo == SIGALRM)
 {
   // Time elapsed
 }
}

另外 ,如果您必须编写一个可移植的库,那么在 Windows 版本中使用 SetTimer() 的想法可能非常难看。对于 Windows,您可以考虑创建一个后台线程,然后使其休眠所需的时间(这样您就可以在没有任何 Windows 消息的情况下完成所有操作)。

于 2012-03-18T19:41:38.347 回答
0

您应该可以使用setittimer

于 2012-03-18T19:34:13.203 回答