qt发射信号表示信号如何与并发线程一起工作

时间:2014-04-02 09:19:58

标签: multithreading qt

我想知道qt如何决定调度信号的哪种方式可行。

http://qt-project.org/doc/qt-4.8/threads-qobject.html#signals-and-slots-across-threads 我找到了

Auto Connection (default) If the signal is emitted in the thread which the receiving object has affinity then the behavior is the same as the Direct Connection. Otherwise, the behavior is the same as the Queued Connection.

在这种情况下affinity是什么意思?

Qt如何知道哪个线程使用对象的方法来防止信号数据损坏? affinity线程是否是创建对象的线程?

2 个答案:

答案 0 :(得分:1)

每个QObject都绑定到一个特定的线程(可以使用thread() function查询),默认情况下是创建对象的线程,除非调用了moveToThread

每个对象与其父对象具有相同的线程。

答案 1 :(得分:0)

对象的线程关联是该对象正在执行的线程。

一个对象从它创建的线程开始,它的线程亲和力就是那个线程。在其生命周期中,它可以移动到不同的线程,这将改变线程亲和性。

当发送信号时,Qt查看发送和接收对象的线程亲和性。如果它们具有相同的亲和力(在同一个线程上运行),则会建立直接连接。

但是,如果两个对象具有不同的线程关联(在不同的线程上运行),则发送方将事件放在接收对象的线程上,该线程使用排队连接