웹에서 데이터를 가져 오는 QThread
이 있습니다. 때로는 사용자가 다른 것을 요청하고 데이터를 가져와야하는 경우도 있습니다.QThread가 isRunning을 호출 할 때 전화를 끊습니다.
현재 구성에서 스레드에 terminate()
을 호출하고 입력 데이터를 변경 한 다음 start()
을 다시 호출합니다. 이제는 정상적으로 작동하지만 가끔 종료 된 스레드에서 isRunning()
또는 isFinished()
을 호출 할 때 메인 이벤트 루프가 멈추는 경우가 있습니다. 영원히 갇혀서 그 과정을 죽일 때까지 회복되지 않습니다.
- 왜
isRunning()
또는isFinished()
는 처음에 걸린 것인가? 그들은 차단할 생각이 없습니다. - 이 워크 플로를 사용할 수 있습니까? 그렇지 않다면, 더 이상 필요하지 않을 때 스레드의 프로세스를 중지시킬 수 있습니까 (아니면 어떻게 포기할 수 있습니까)?
내 스레드에 뮤텍스가 없습니다. 웹에서 데이터를 가져 와서 신호를 통해 주 스레드로 보냅니다. 언제든지 죽이는 것이 좋으며, 물건을 정리할 필요가 없습니다. 게다가 쓰레드를 죽이는 것은 isRunning()의 행동을 망가 뜨리는 것으로 생각하지 않는다. – iTayb
QThread 자체가 가지고있는 뮤텍스는 어떨까요? 나는 [this] (http://qt.gitorious.org/qt/qt/blobs/4.8/src/corelib/thread/qthread.cpp#line465)가'isRunning'이 걸려있는 곳에 있다고 말하지만, 말하기는 어렵습니다. 나는 그것을 재현 할 수 없다. – mata