2011-05-31 55 views
1

我已經創建了兩個程序A和B. B被設計爲在64位A內啓動的32位QProcess。這些程序通過stdin,stdout和QSharedMemory很好地進行通信。鬆散的QProcess

A:A() { 
QProcess *p = new QProcess(this); 
p->start("B.exe"); 
} 
A:~A() { 
p->deleteLater(); 
} 

現在,如果A被關閉,B也將被關閉。 但是,如果我在Windows任務管理器中結束了進程A,那麼B將繼續生活在鬆散狀態,並且B的CPU使用率將通過屋頂。爲什麼?

如果A被立即銷燬,我該如何關閉B?

回答

1

嘗試到close()(或kill())從你的DTOR的另一個過程,然後做一個原始的delete p。在使用QextSerialPort對象時,我也遇到了類似的問題,當使用deleteLater()刪除時,它也傾向於保留爲ghost,但立即打包並立即刪除。

+0

我做了一些調試,發現應用程序通過Windows任務管理器或QtCreator中的「紅色方形按鈕」關閉時,A的DTOR從未達到。這就是爲什麼這個過程繼續存在,爲什麼'close()'或'kill()'不起作用... – Magnus 2011-05-31 14:21:04