QThread 移动到线程。 QThread 中的同步
QThread moveToThread. Synchronization in QThread
我想写一些必须在自己的线程中工作的 class。
我读过这篇文章:http://wiki.qt.io/Threads_Events_QObjects
。它建议移动必须在自己的线程中工作的对象,例如:
TestClass tst;
QThread *thread = new QThread();
tst.moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), &tst, SLOT(start()));
并且在 slot
的 TestClass 中,我放置了所有初始化程序。
1. 我可以在 TestClass 的构造函数中移动到线程吗?喜欢:
TestClass::TestClass() {
QThread *thread = new QThread();
this->moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), this, SLOT(start()));
}
此后 class 的所有对象都将在自己的线程中工作。
在 TestClass
中我有私有 struct
可以在两个线程中更改。
我应该使用 mutex
还是使用 signal/slots:
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
应该做的事情之上,您尝试添加内部线程管理。另外 TestClass
由于线程管理,析构函数会有点复杂。
每个 TestClass
对象都有自己的 struct
。如果来自主线程的调用是更改 val
的唯一方法,则无需执行任何操作。如果 val
可以从超过 1 个线程(包括它自己的线程)更改,则使用 QMutex
.
我想写一些必须在自己的线程中工作的 class。
我读过这篇文章:http://wiki.qt.io/Threads_Events_QObjects
。它建议移动必须在自己的线程中工作的对象,例如:
TestClass tst;
QThread *thread = new QThread();
tst.moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), &tst, SLOT(start()));
并且在 slot
的 TestClass 中,我放置了所有初始化程序。
1. 我可以在 TestClass 的构造函数中移动到线程吗?喜欢:
TestClass::TestClass() {
QThread *thread = new QThread();
this->moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), this, SLOT(start()));
}
此后 class 的所有对象都将在自己的线程中工作。
在
TestClass
中我有私有struct
可以在两个线程中更改。 我应该使用mutex
还是使用 signal/slots: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
应该做的事情之上,您尝试添加内部线程管理。另外TestClass
由于线程管理,析构函数会有点复杂。每个
TestClass
对象都有自己的struct
。如果来自主线程的调用是更改val
的唯一方法,则无需执行任何操作。如果val
可以从超过 1 个线程(包括它自己的线程)更改,则使用QMutex
.