我想寫一些必須在自己的線程工作的類。 我讀過這篇文章:http://wiki.qt.io/Threads_Events_QObjects
。它建議移動對象,在自己的線程工作,如:QThread moveToThread。在QThread同步
TestClass tst;
QThread *thread = new QThread();
tst.moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), &tst, SLOT(start()));
而且在識別TestClass的slot
我把所有的初始化程序。 1.我可以在TestClass的構造函數中移動到線程嗎?像:
TestClass::TestClass() {
QThread *thread = new QThread();
this->moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), this, SLOT(start()));
}
之後,此類的所有對象將在自己的線程中工作。
在
TestClass
我有私人struct
它可以在兩個線程中進行更改。 我應該使用mutex
爲或使用信號/時隙:void TestClass::changeStruct(int newValue) { // invoked in main thread emit this->changeValue(newValue); } // slot void TestClass::changeStructSlot(int newValue) { // this slot will be invoked in the second thread this._struct.val = newValue; }
爲什麼,僅僅發出信號的功能,爲什麼不把信號連接到'的TestClass :: changeStructSlot'併發出在那裏你調用'的TestClass :: changeStruct'該信號,或致電['QMetaMethod ::調用'](http://doc.qt.io/qt-5/qmetamethod.html#invoke)/ ['QMetaObject :: invokeMethod'](http://doc.qt.io/qt-5/qmetaobject.html #invokeMethod)。 – thuga
在啓動線程之前更好地連接'SIGNAL(start())',否則可能會由於競態條件而丟失信號。 –