Multithreading 当调用isRunning时,QThread会挂起
我有一个从web获取数据的Multithreading 当调用isRunning时,QThread会挂起,multithreading,qt,qt4,qthread,Multithreading,Qt,Qt4,Qthread,我有一个从web获取数据的QThread。有时,用户会要求其他内容,并且还需要获取更改后的数据 在当前配置中,我在线程上调用terminate(),更改输入数据,然后在线程上再次调用start()。现在,这很好,但有时在对终止的线程调用isRunning()或isFinished()时,主eventloop会被卡住。它会永远被卡住,直到我停止进程后才会恢复 为什么首先要挂起isRunning()或isFinished()?他们不想阻止 这个工作流程可以接受吗?如果不需要,当我不再需要线程时,如何
QThread
。有时,用户会要求其他内容,并且还需要获取更改后的数据
在当前配置中,我在线程上调用terminate()
,更改输入数据,然后在线程上再次调用start()
。现在,这很好,但有时在对终止的线程调用isRunning()
或isFinished()
时,主eventloop会被卡住。它会永远被卡住,直到我停止进程后才会恢复
isRunning()
或isFinished()
?他们不想阻止terminate()
,请阅读中的警告
虽然可以重新启动
QThread
,但重新启动线程通常不是一个好主意,应该有更好的解决方案来执行您尝试执行的操作。在某些情况下,线程在终止后变得不可用,isRunning()
和isFinished()
可能会挂起调用线程,即使仅在终止后调用
信号
我的解决方法是终止一个线程,忘掉它,然后启动一个新的线程。我的线程没有任何互斥锁。它从web获取数据,并通过信号将其发送到主线程。随时杀死它是可以的,它不需要清理任何东西。另外,杀死线程并不会破坏
isRunning()
的行为。那么QThread本身持有的互斥锁呢?我敢打赌,isRunning
是挂起的,但很难说,我无法复制它。