Jer*_*rry 4 windows qt multithreading
我从这里找到了这个QThread示例。与子类化QThread相比,建议使用QObject和QThread。
class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork() {
/* ... */
}
};
QThread *thread = new QThread;
Worker *worker = new Worker;
worker->moveToThread(thread);
thread->start();
QMetaObject::invokeMethod(worker, "doWork", Qt::QueuedConnection);
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是何时以及如何删除线程?
我试图将完成连接到2个插槽,myTest和deleteLater。我在myTest中设置了一个断点,但从未触发过此断点。因此,我怀疑没有完成的信号,这意味着该线程不会被删除。
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), this, SLOT(myTest()));
Run Code Online (Sandbox Code Playgroud)
对于辅助对象,我发出一个完成的信号作为doWork中的最后一条指令,并将其连接到可以删除该辅助对象的插槽中。这是正确的方法吗?
Qt版本:4.6.2
当线程的worker方法执行完成时,线程会正常退出,但是如果您想在线程退出时间内做一些事情,请使用finished()信号,可以通过将finished()信号连接到来释放生活在刚刚结束的线程中的对象QObject::deleteLater():
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7898 次 |
| 最近记录: |