当呼叫正在运行时,QThread挂起

时间:2012-11-03 19:22:03

标签: multithreading qt qt4 qthread

我有一个QThread从网络上获取数据。有时用户会询问其他内容,并且还需要获取数据更改。

在我当前的配置中,我在线程上调用terminate(),更改输入数据,然后再次在线程上调用start()。现在,这样可以正常工作,但有时我会在终止线程上调用isRunning()isFinished()时遇到主事件循环。它永远陷入困境,直到我杀死进程才恢复。

  1. 为什么isRunning()isFinished()会挂在首位?他们不想阻止。
  2. 此工作流程是否可以接受?如果没有,当我不再需要它时,我怎么能停止线程的进程(或者我怎么能放弃它)?

2 个答案:

答案 0 :(得分:1)

请勿使用terminate(),请阅读documentation中的警告。

有可能重新启动QThread,重新启动线程通常不是一个好主意,应该有一个更好的解决方案来做你想做的事情。

答案 1 :(得分:0)

在某些情况下,线程在终止后变得无法使用,isRunning()isFinished()可能会挂起调用线程,即使只在TERMINATED信号之后调用。

我的解决方法是终止一个帖子,忘记它并开始一个新的。