0

我有一个QThread从网络上获取数据的。有时用户要求其他东西,并且数据也需要被获取更改。

在我当前的配置中,我调用terminate()线程,更改输入数据,然后start()再次调用线程。isRunning()现在,这很好用,但有时我在调用或isFinished()终止线程时会卡住主事件循环。它永远卡住了,直到我终止进程才恢复。

  1. 为什么会isRunning()isFinished()挂在首位?他们不应该阻止。
  2. 这个工作流程可以接受吗?如果没有,当我不再需要它时如何停止线程的进程(或者我如何放弃它)?
4

2 回答 2

1

不要使用terminate(),阅读文档中的警告。

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

于 2012-11-03T19:51:47.837 回答
0

似乎在某些情况下,线程在终止后变得不可用,isRunning()并且isFinished()可能会挂起调用线程,即使仅在TERMINATED信号之后调用也是如此。

我的解决方法是终止一个线程,忘记它并启动一个新线程。

于 2012-11-08T22:52:09.640 回答