特定时间段后的 C++ 调用函数 - 无提升

标签 c++ function timer call ogre

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

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

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

有人知道我会怎么做吗?

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

最佳答案

即使如此有用和简单但不可移植,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 上,您可能会考虑使用更简单的 PostMessageDelayed() 而不是 SetTimer()。它会使用更少的资源。
对于 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 消息的情况下执行所有操作)。

关于特定时间段后的 C++ 调用函数 - 无提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761526/

相关文章:

C - 在函数中写入字符串。错误 :expected expression

c++ - 修改系统时钟时,boost::deadline_timer 可能会失败

javascript - 番茄钟计时器变为负数并开始计数

c++ - move 语义如何保存临时变量的数据?

c++ - 在 Cascades 和 CoreNative 这两个主要的 Blackberry Playbook C++ 框架之间,哪个更容易使用?

c++ - 具有 boost 变体的段错误

javascript - 如何在定义函数时捕获外部变量的当前值

android - OpenCV 独立安装程序 opencv

r - R 中带有运算符的用户指定函数

vbscript - 用于 VBScript 性能测量的细粒度计时器