根据C ++标准或C ++标准库,我在哪里/如何获得Looper?
我需要设计自己的回调系统,当然,我需要这个来管理我的队列和我的组件。
一个looper是给定频率做一件简单的事情,它只是在每个时钟运行一个队列,如果你设置一个10毫秒的弯针,每10ms looper将触发队列中的事件/事件。这基本上是一个looper,大部分时间通常都与内核,硬件时钟或某些真正低级别的内容有关。
答案 0 :(得分:2)
您可以使用新C ++ 11标准中的一些原语来创建这样的东西。
使用std::thread
和std::timed_mutex
来控制std::queue
的循环读数。
将functor类放入队列中。从线程循环中执行仿函数。
你也可以反过来推动仿函数对象'向上'以恒定频率排队并从“客户端”执行它们。侧。
不知何故,它归结为有一个时间控制访问来自' Looper'线。你可以用例如std::thread::sleep_for()
执行此操作,或使用一些更复杂的机制,其行为类似于定时信号量(例如,条件变量与std::timed_mutex
相结合)。
答案 1 :(得分:1)
QTimer做你想要的 - “单发”,或者在你的情况下,以给定(毫秒)的频率重复发射。
你也可能谷歌为“看门狗计时器”,因为我认为这可能是一个比“looper”更常见的术语。
如果你想更低级别,一些系统(如Windows)有一个“系统时钟”(通常是毫秒级分辨率),另一个更高性能的时钟,如“多媒体时钟”(通常如果性能很重要,则在纳秒分辨率下。
[编辑] ,好的,所以我看了一个关于“什么是动摇”的视频。这看起来像标准的事件处理队列。 GUI事件触发添加到队列的消息,“looper”定期清除/执行消息队列。一个特例是“looper”还处理“本地服务呼叫”(在Android上,这是视频的主题)。所以,你似乎只需要:
视频说明:
所以,有趣的是,但看起来并不特别难以实现。这是一个良好的胎面模式。
因此,在这种情况下,我对QTimer
的建议只是解决方案的一部分。听起来好像你希望消息队列的库可以随它一起使用。