【问题标题】:Emit signals or post events from QRunnable从 QRunnable 发出信号或发布事件
【发布时间】:2011-02-18 04:02:31
【问题描述】:

QRunnable::run() 内部发出信号是正确的做法吗?我需要通知我的 GUI 线程 QRunnable 处理的图像已完成。我正在使用QThreadPool/QRunnable,因为我需要能够在池中已经有任务的情况下向池中添加新任务。我发现使用 QtConcurrentQFutureWatcher 很难做到这一点。

QRunnable 使用在run() 中创建的QObject 连接到目标QObject 并发出信号。

如果从QRunnable 发出不是一件好事,是否可以从那里发布事件?

【问题讨论】:

    标签: multithreading events qt threadpool signals-slots


    【解决方案1】:

    是的,在QRunnable::run() 中发出信号和发布事件都是很好的事情,因为它们都是线程安全的。为了正确处理信号和事件,QObjects 必须具有正确的线程亲和性。详情请见Threads and QObjects

    【讨论】:

    • 我认为我的困惑是因为信号和事件需要线程才能工作的偶数循环。如果 QThreadPool 线程有自己的循环,Qt 文档中没有提及。还是事件循环只需要接收?
    • 是的,只有QObjects从其他线程接收信号时才需要事件循环。
    猜你喜欢
    • 2012-11-26
    • 2019-05-18
    • 2022-01-02
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多