Qt中主进程退出时,如何关闭子进程

时间:2022-05-17 19:15:39
在主进程中开了一个子进程,用于网络连接。当主界面退出时,貌似子进程还在跑。
请问怎么捕捉父进程的退出事件(关闭主界面),来关闭子进程?

8 个解决方案

#1


解决了。在MainWindow中继承并实现了closeEvent()的事件方法,在该函数中向进程本身发送一个SIGINT的信号,同时在main中捕捉SIGINT信号,然后kill子进程便可以了。

#2


是不是意味要结贴了。。直接closeEvent里面kill不可以吗。

#3


创建子线程,保存其ID
直接closeEvent里面kill

#4


用信号不是更好吗,可以通知子线程该结束了,释放资源。
直接kill不是很好吧。

#5


引用 2 楼  的回复:
是不是意味要结贴了。。直接closeEvent里面kill不可以吗。

是可以的,但要把pid给传过来,然后再kill

#6


引用 4 楼  的回复:
用信号不是更好吗,可以通知子线程该结束了,释放资源。
直接kill不是很好吧。


那就在捕捉到信号后,把资源给释放掉了,然后再对这个信号accept就可以了吧

#7


引用 3 楼  的回复:
创建子线程,保存其ID
直接closeEvent里面kill

还要创建多一个线程啊?

#8


void MainWindow::closeEvent(QCloseEvent *e)
{
    QApplication::exit(0);

}

#1


解决了。在MainWindow中继承并实现了closeEvent()的事件方法,在该函数中向进程本身发送一个SIGINT的信号,同时在main中捕捉SIGINT信号,然后kill子进程便可以了。

#2


是不是意味要结贴了。。直接closeEvent里面kill不可以吗。

#3


创建子线程,保存其ID
直接closeEvent里面kill

#4


用信号不是更好吗,可以通知子线程该结束了,释放资源。
直接kill不是很好吧。

#5


引用 2 楼  的回复:
是不是意味要结贴了。。直接closeEvent里面kill不可以吗。

是可以的,但要把pid给传过来,然后再kill

#6


引用 4 楼  的回复:
用信号不是更好吗,可以通知子线程该结束了,释放资源。
直接kill不是很好吧。


那就在捕捉到信号后,把资源给释放掉了,然后再对这个信号accept就可以了吧

#7


引用 3 楼  的回复:
创建子线程,保存其ID
直接closeEvent里面kill

还要创建多一个线程啊?

#8


void MainWindow::closeEvent(QCloseEvent *e)
{
    QApplication::exit(0);

}