根据 C++ 标准或 C++ 标准库,我在哪里/如何获得 Looper?
我需要设计自己的回调系统,当然,我需要这个系统来管理我的队列和组件。
Looper 是给定频率做一件简单的事情的东西,它只是在每个时钟运行一个队列,如果您设置一个 10 ms 的 looper,则每 10 ms 循环器将触发队列中的事件/事件。
这基本上是一个循环器,大部分时间通常与内核、硬件时钟或一些非常低级的东西相关联。
您可以使用新 C++11 标准中的一些原语来创建这样的东西。使用std::thread
和std::timed_mutex
控制从std::queue
. 将仿函数类放入队列中。从线程循环中执行函子。
您也可以反之亦然,以恒定频率将函子对象“向上”推入队列并从“客户端”端执行它们。
不知何故,归结为从“Looper”线程对队列进行时间控制的访问。您可以使用 egstd::thread::sleep_for()
来执行此操作,或者使用一些更复杂的机制,其行为类似于定时信号量(例如,与 a 耦合的条件变量std::timed_mutex
)。
QTimer做你想做的事——“单次”,或者在你的情况下,以给定的(毫秒)频率重复触发。
您也可以在谷歌上搜索“watch-dog-timer”,因为我认为这可能是比“looper”更常见的术语。
如果你想更底层,一些系统(如 Windows)有一个“系统时钟”(通常以毫秒分辨率),还有另一个更高性能的时钟,如“多媒体时钟”(通常以纳秒分辨率) 如果性能很重要。
[编辑],好的,所以我观看了关于“what-is-a-looper”的视频。这看起来像一个标准的事件处理队列。GUI 事件触发消息添加到队列,并且“循环器”定期清除/执行消息队列。一个特殊情况是“looper”还处理“local-service-calls”(在 Android 上,这是视频的主题)。因此,您似乎只需要:
视频注释:
所以,很有趣,但看起来并不特别难以实现。这是一个很好的模式。
因此,在这种情况下,我的建议QTimer
只是解决方案的一部分。听起来您希望消息队列的库与它一起使用。