【问题标题】:timer_create and TimerQueueTimer functionality in portable library (like boost)可移植库中的 timer_create 和 TimerQueueTimer 功能(如 boost)
【发布时间】:2012-02-11 22:47:20
【问题描述】:

我编写了一个在 Linux 上运行并使用 sigevent 和 timer_create 的程序,以便以指定的频率定期调用回调函数。现在,我希望程序是可移植的(Windows 和 Linux),所以要做到这一点很长的路要走是使用 #ifdefs 并使用 Windows 等效功能。

AFAIK,Windows 上的等价物是 TimerQueueTimer。

我知道这是一个操作系统服务,但就像线程一样,它可以通过像 Boost C++ 这样的库进行移植。

问题是:你知道Boost C++库中是否有这样的东西,或者可能在POCO或其他受人尊敬的库中吗?

如果它不存在,那么有什么东西可以阻止可移植库中存在这样的东西吗?

仅供参考,boost::asio::deadline_timer 不是我要找的,它必须是定期调用与 timer_create 和 TimerQueueTimer 精度相同的回调函数的服务。

【问题讨论】:

  • 起初我以为 libev 可能会解决你的问题,但后来我意识到我从来没有听说过它在 Windows 上运行,所以经过一些研究后我发现了这个:doc.dvgu.ru/devel/… 嗯,据他们说,Windows事件系统与 POSIX 差异太大,无法兼容...
  • 您需要为此使用可移植库。再看看boost::asio,它当然可以做你需要的。

标签: c++ boost timer portability


【解决方案1】:

POCO 有一个运行 TimerTask(s) 的多线程 Timer 类。基本上,您使用计时器到期时想要执行的操作来覆盖 TimerTask 的 run() 方法。可以将多个任务添加到 Timer 对象,该对象生成一个线程以顺序运行所有待处理的任务。这些任务可以是一次性的或间隔可重复的。

不确定它是否满足您的所有需求,但值得一看。

【讨论】:

    【解决方案2】:

    我强烈推荐 ACE(自适应通信环境)。具体查看 ACE_Reactor 类和 ACE_Reactor::schedule_timer(...) 方法。

    Visit the Wiki page for more general information about ACE.

    Or go directly to the official website.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2015-12-16
      相关资源
      最近更新 更多