【问题标题】:How to Start Qt Event Process without blocking?如何在不阻塞的情况下启动 Qt 事件进程?
【发布时间】:2013-12-26 04:27:54
【问题描述】:

这是我的场景:我有一个 dll(在后端使用 Qt,并且没有启动事件循环)。我能够在这个 dll 中执行信号槽通信(只有一个线程)。我想在这个 dll 中使用 QFileSystemWatcher 的功能。但看起来,QFileSystemWatcher 启动了自己的线程,由于没有事件进程,它无法与我的主线程通信。

所以,基本上我需要一种方法来启动事件处理而不被阻塞!

【问题讨论】:

  • 您到底想用 QFileSystemWatcher 实现什么?此外,没有“Qt 事件过程”​​。您可能正在寻找QEventLoop。无论如何,它都会阻塞,但根据具体的用例,它可能是红鲱鱼。
  • 是的,它是主事件循环。当特定文件发生任何更改时,我想使用 QFileSystemWatcher 工具进行更新。我可以用它来重新读取文件。
  • 好吧,我的 dll 被用作 API,这意味着我不想阻塞,而且每件事都在一个线程上。这就是它没有创建事件循环的原因。

标签: c++ multithreading qt qtcore qeventloop


【解决方案1】:

所以,基本上我需要一种方法来启动事件处理而不被阻塞!

所以,根据评论讨论,基本上你想使用QEventLoop 功能而不使用QEventLoopQEventLoop 本质上必须是“阻塞”的,才能真正有一个事件循环。

您始终可以在内部创建一个带有事件循环的“阻塞”线程,但是您的信号槽管理可能会绑定到该特定线程。

这不是使用事件循环的常用方法,但根据您的具体情况,在这种特殊情况下可能就足够了。

【讨论】:

  • 创建另一个带有自己的事件循环的线程是一个可能的解决方案吗?这个基于线程的循环将被阻塞以处理来自用户的输入/事件,但主线程将不受阻塞地工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 2011-06-17
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多