0
我有兩個類 - 一個運行在主線程中,執行GUI操作,另一個執行一些計算併發出網絡請求。爲什麼不調用這個類的析構函數?
// A member of the class that runs in the main thread
QThread thread;
這裏是從類的初始化方法,該方法在主線程運行的片段:
// Create the class that runs in the other thread and move it there
CServerThread * server = new CServerThread;
server->moveToThread(&thread);
// When the thread terminates, we want the object destroyed
connect(&thread, SIGNAL(finished()), server, SLOT(deleteLater()));
thread.start();
在析構函數,在主線程運行類:
if(thread.isRunning())
{
thread.quit();
thread.wait();
}
我期望發生的是線程終止並銷燬CServerThread
類的實例。但是,CServerThread
類的析構函數未被調用。
感謝您的解釋......但不是'deleteLater()'從主線程的上下文而不是我創建的'QThread'的調用? –
'完成的'信號由您的線程發出。由於您的服務器也屬於該線程,因此處理將發生在線程中,而不是主線程中。 (見[這裏](http://doc.qt.nokia.com/4.7/threads-qobject.html)在最底部,'自動連接'描述) – Mat
不會使用'Qt :: DirectConnection'導致插槽在主線程中運行?哪個線程正在發出'finished()'信號? –