首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在哪里/如何获得Looper?

我可以在哪里/如何获得Looper?
EN

Stack Overflow用户
提问于 2012-10-06 20:39:57
回答 2查看 1.3K关注 0票数 0

根据C++标准或C++标准库,我可以在哪里/如何获得循环?

我需要设计我自己的回调系统,当然,我需要这个系统来管理我的队列和组件。

循环是一个给定频率做一件简单事情的东西,它只在每个时钟运行一个队列,如果你设置一个10ms的循环,每10ms循环将触发队列中的一个或多个事件。

这基本上是一个循环,大多数时间通常与内核、硬件时钟或其他非常低级的东西联系在一起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-06 20:52:45

QTimer执行您想要的操作--“单次触发”,或者像您的示例一样,以给定(毫秒)的频率重复触发。

你也可以在谷歌上搜索“看门狗计时器”,因为我认为这可能是一个比"looper“更常见的术语。

如果你想更低级,一些系统(如Windows)有一个“系统时钟”(通常是毫秒级的精度),如果性能很重要的话,还有另一个更高性能的时钟,比如“多媒体时钟”(通常是纳秒级的)。

编辑,好的,所以我看了"what-is-a-looper“的视频。这看起来像一个标准的事件处理队列。GUI事件触发添加到队列中的消息,“循环”周期性地清除/执行消息队列。一个特例是"looper“还处理”本地服务调用“(在Android上,这是视频的主题)。所以,看起来你只需要:

  • a message queue
  • 用于清除消息队列的计时器(在线程上,或独立于

视频注释:

  • 视图使用循环消息来激发事件
  • 由于循环与线程的比例为1:1,视图树太过
  • 您创建的线程不能直接接触视图
  • ,但您可以为自己的线程创建新的循环

<

  • >F218>

因此,很有趣,但看起来并不是很难实现。这是一种良好的胎面模式。

因此,在这种情况下,我对QTimer的建议只是解决方案的一部分。听起来您想让消息队列的库与它一起使用。

票数 1
EN

Stack Overflow用户

发布于 2012-10-06 21:04:18

你可以使用新的C++11标准中的一些原语来创建这样的东西。使用std::threadstd::timed_mutex控制从std::queue读取数据的循环。将functor类放入您的队列中。从线程循环中执行函数器。

你也可以让它反之亦然,以恒定的频率将functor对象“向上”推送到队列中,并从“客户端”端执行它们。

不知何故,归根结底,它是通过“循环”线程对队列进行时间控制的访问。你可以使用std::thread::sleep_for()来做这件事,或者使用一些更复杂的机制,它的行为就像一个定时信号量(例如,一个条件变量和一个std::timed_mutex)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12759891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档