1
2
你有几个相互关联的问题。 对我来说,最重要的问题是与处理线程的信号/插槽有关。 在单个线程中使用信号/插槽时,qt默认假定 AutoConnection 或“直接”连接。在直接连接模式下,信号/插槽的作用几乎与回调函数完全相同。这意味着发出信号的函数基本上执行子例程调用。 在跨线程传输信号/插槽时,qt默认情况下采用queuedconnection。这里发生的事情很复杂。序列是
既然知道了这一点,回到您原来的问题,如何知道时隙函数何时停止处理?Qt没有一个我知道如何传递这些信息的习惯用法。但是Qt信号/插槽的习惯用法是,信号线程不应该知道插槽如何工作或连接类型是什么。 所以我的建议是通过一个指向待处理数据的指针传递数据。在数据中,我将添加两个字段-
使用这种方法- -调用线程没有理由直接了解信号线程。 -如果从单线程或多线程开始,这个结构中没有需要更改的内容。 希望这对你的问题有帮助。这是我们商店目前使用的方法。 |
2
1
这个成语不是Qt特有的。我会为你已经提出的第二种可能性的变体辩护。但是,您不需要为答案注册信号/插槽对,只需传递一个回调,该回调将由生产者处理,但可能在消费者线程上进行。例如:
在消费者方面,你需要:
|
JaredL · PySide插槽未在对象的线程中运行 7 年前 |
Nameless · qt-在选项卡小部件中显示表单 7 年前 |
Carmoreno · Pyqt4的“KeyUp”事件 8 年前 |
KcFnMi · 使Qt5连接样式在Qt4中工作 9 年前 |
Ejaz · QImage将图像保存到仅以p或j开头的文件名 10 年前 |