请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于moveToThread线程退出的问题?

我看到析构函数里的td用的是terminate退出的, 但是网上说不推荐用这种方式退出, 但我改成quit或者exit退出后会报错:
QThread: Destroyed while thread is still running

线程里跑的是一个死循环监听设备状态用的, 如果这个死循环不启动则能正常退出(使用terminate就完全正常)

这是怎么回事?

正在回答 回答被采纳积分+3

2回答

小豆君老师 2024-01-17 17:44:04

terminate是强杀线程的,这可能会导致线程没有正常退出,从而可能出现某些关键资源没有释放或者数据没有回写等问题,所以,还是推荐要先正常关闭线程,如果正常关闭失败,则再去强制关闭。最好再强杀时保留日志用于分析退出失败原因,且关键数据要在强杀前进行保存或回写,即使强杀也不会对系统构成问题。

因为本节代码中设置了线程执行3秒,所以为了方便,直接调用了强制退出,这里只是做了一个演示,退出线程还是可以参考17-3给大家写的示例

线程经常会使用死循环来执行某些操作,所以一般使用标志位来控制线程退出

https://img1.sycdn.imooc.com/szimg/65a79fc40935115408260548.jpg


0 回复 有任何疑惑可以回复我~
提问者 全网最帅 2024-01-16 14:10:16

已解决, wait函数不要传入参数即可

0 回复 有任何疑惑可以回复我~
  • wait不传参数是永久等待
    回复 有任何疑惑可以回复我~ 2024-01-17 17:45:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信