【发布时间】:2017-02-13 16:45:51
【问题描述】:
我有一个 PyQt 应用程序,它通过回调从外部源接收信息,这些回调是从不受我控制且不是 QThread 的线程调用的。将此类信息传递给主线程而不进行轮询的正确方法是什么?特别是,我想发出一个 Qt 信号,以便在新数据到达时唤醒主线程(或另一个 QThread)。
【问题讨论】:
-
不太明白,非qt线程的源码不能改吗?完成后发出信号?
-
我唯一能控制的是回调函数本身,它是一个普通的python函数。 IE。我可以发出信号,但这会被允许吗?将运行该函数的线程不是由我的代码创建的,并且根本没有 Qt 的概念。所以也许我应该问一下发出信号是否是线程安全的(即使来自非 Qt 线程)?
-
我不知道这是最佳做法还是不好的做法,但我会尝试这样做,从您的回调中发送信号。我认为它应该工作。 (Qt 线程安全取决于连接类型:doc.qt.io/qt-4.8/…
-
您正在链接的文档状态“另一方面,您可以安全地从 QThread::run() 实现中发出信号,因为信号发射是线程安全的。”第二部分说你的建议很好,但第一部分似乎再次将此语句限制为 QThreads...
-
线程安全意味着即使它不在基于
QThread的线程中也应该可以工作。
标签: python multithreading qt pyqt qthread