根据C++标准或C++标准库,我可以在哪里/如何获得循环?
我需要设计我自己的回调系统,当然,我需要这个系统来管理我的队列和组件。
循环是一个给定频率做一件简单事情的东西,它只在每个时钟运行一个队列,如果你设置一个10ms的循环,每10ms循环将触发队列中的一个或多个事件。
这基本上是一个循环,大多数时间通常与内核、硬件时钟或其他非常低级的东西联系在一起。
发布于 2012-10-06 20:52:45
QTimer执行您想要的操作--“单次触发”,或者像您的示例一样,以给定(毫秒)的频率重复触发。
你也可以在谷歌上搜索“看门狗计时器”,因为我认为这可能是一个比"looper“更常见的术语。
如果你想更低级,一些系统(如Windows)有一个“系统时钟”(通常是毫秒级的精度),如果性能很重要的话,还有另一个更高性能的时钟,比如“多媒体时钟”(通常是纳秒级的)。
编辑,好的,所以我看了"what-is-a-looper“的视频。这看起来像一个标准的事件处理队列。GUI事件触发添加到队列中的消息,“循环”周期性地清除/执行消息队列。一个特例是"looper“还处理”本地服务调用“(在Android上,这是视频的主题)。所以,看起来你只需要:
视频注释:
<
因此,很有趣,但看起来并不是很难实现。这是一种良好的胎面模式。
因此,在这种情况下,我对QTimer的建议只是解决方案的一部分。听起来您想让消息队列的库与它一起使用。
发布于 2012-10-06 21:04:18
你可以使用新的C++11标准中的一些原语来创建这样的东西。使用std::thread和std::timed_mutex控制从std::queue读取数据的循环。将functor类放入您的队列中。从线程循环中执行函数器。
你也可以让它反之亦然,以恒定的频率将functor对象“向上”推送到队列中,并从“客户端”端执行它们。
不知何故,归根结底,它是通过“循环”线程对队列进行时间控制的访问。你可以使用std::thread::sleep_for()来做这件事,或者使用一些更复杂的机制,它的行为就像一个定时信号量(例如,一个条件变量和一个std::timed_mutex)。
https://stackoverflow.com/questions/12759891
复制相似问题