2011-05-31 46 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