为了减轻我的清理工作,我想将我的工作对象的父对象设置为它移动到的 Qthread。(见下文)。
void TelnetServer::incomingConnection(qintptr socketDescriptor)
{
QThread * TelnetConnectionThread = new QThread(this);
TelnetConnection *worker = new TelnetConnection(socketDescriptor,TelnetConnectionThread);
connect(TelnetConnectionThread, SIGNAL(started()), worker, SLOT(start()));
connect(TelnetConnectionThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
worker->moveToThread(TelnetConnectionThread); // Move worker into QThread
TelnetConnectionThread->start();
}
在 start() 行之前,我添加了:
worker->setParent(TelnetConnectionThread);
但在运行时我看到一个错误,我不能这样做,因为新的父级在不同的线程中。这个怎么可能?在上面的行中,我将工作线程移到了新线程……所以工作线程应该与 TelnetConnectionThread 在同一个线程中。帮助?
我用一些 qDebug's 和 thread() 确认了 worker 实际上确实被转移到了新线程!