便携式周期定时器,周期约为100ms

时间:2009-07-13 09:17:39

标签: c++ multithreading cross-platform

HeJ小鼠!

我正在寻找一种在C ++项目中定期调度任务的可移植方式。在这个特定的项目中应该避免使用诸如boost之类的库。

分辨率要求不太严重:平均上网本在5Hz到20Hz之间。

该项目使用OpenGL渲染HMI,但由于我正在处理后端部分,所以我对它不太熟悉。

感谢您的任何建议或意见, ·阿尔

编辑:我们的'Task'类实际上做的是使用Windows的CreateThread(..)或linux的pthread_create(..)创建一个线程。

4 个答案:

答案 0 :(得分:1)

由于您已经了解完整的目标系统集,因此可以采用SQLite方式。他们有完全相同的问题 - 他们使用的很多东西都是系统依赖的。

所有依赖于系统的事物都是针对每个目标系统单独实现的,并且根据预处理器指令集编译正确的版本。

答案 1 :(得分:1)

如果你想要一个周期性的触发器,一个在循环中休眠100ms的线程可能会有效。

答案 2 :(得分:1)

最简单的方法是在一个周期内使用Sleep(100ms),所需要的只是便携式睡眠。对于Linux,它可以实现如下

void Sleep(unsigned long ulMilliseconds)
{
    struct timeval timeout;
    timeout.tv_sec = 0;
    timeout.tv_usec = ulMilliseconds * 1000;
    select(1, NULL, NULL, NULL, &timeout);
} 

答案 3 :(得分:0)

我认为你可以找到很多包含这类东西的库,比如Glibmm / sigc++,但我认为这对你的指甲来说太大了。我认为你已经有了可以使用的库,如果它们包含便携式多线程而没有定期计时器,你可以设计一种简单的方法来自己完成。如果时序要求很低,只需启动一个运行无限循环的线程,该线程在休眠时调用你的回调方法。您可以使用sigc++来处理回调,因为它是轻量级的。如果你没有线程等,并且不想使用boost,你可以尝试Glibmm。但如果你不想要提升,我想你不会想要这么大的图书馆: - )

my2cents.