某段时间后的C ++调用函数 - 没有提升

时间:2012-03-18 19:29:22

标签: c++ function timer call ogre

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

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

理想情况下,我希望该解决方案适用于Windows和Linux。我知道这是一个很高的命令!

有谁知道我会怎么做?

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

2 个答案:

答案 0 :(得分:1)

即使如此有用和简单,它也不可移植,Windows和Linux使用不同的线程库,所以你必须写这样的东西:

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

代码写在这里并不短,所以请查看here的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消息的情况下完成所有操作)。

答案 1 :(得分:0)

您应该可以使用setittimer