如何实现在同一执行上下文中执行的计时器回调

时间:2012-11-04 10:30:29

标签: c++ timer thread-safety

某些编程环境(如C ++ builder)具有带回调函数的计时器组件,该函数在与创建计时器对象相同的执行上下文中执行。

我想知道如何使用线程在普通的c ++中做类似的事情。 或者是否有其他方法可以定期调用回调来执行某些任务并在与调用线程相同的执行上下文中运行?

2 个答案:

答案 0 :(得分:0)

尝试libevent

  

libevent API提供了一种执行回调函数的机制   当特定事件发生在文件描述符上或超时后   已达到。此外,libevent还支持回调   信号或定期超时。

答案 1 :(得分:0)

线程是否可以在其自己的上下文中处理计时器回调完全取决于如何将计时器到期传递给线程。线程必须在收到一些线程间通信后调用回调本身(例如,Windows GUI线程在等待其Windows消息队列输入时收到的WM_TIMER消息)。如果线程没有等待输入,它就无法处理来自任何类型的计时器的任何线程间通信,因此无法在其自己的上下文中调用任何计时器处理程序回调。

Forms.Timer,C ++构建器Timer组件和其他类似的方法来安排基于间隔的线程间通知 - 如果线程没有主动等待并处理这些通知,则上下文中不能有计时器回调那个帖子。