나는 청취 서버가 QThread
입니다. 즉시 QThread
의 작업을 일시 중지하고 싶습니다. 전혀 기다리지 않고 종료하는 것처럼 거의 즉각적이어야합니다.Qt, 즉시 QThread를 일시 중지하는 방법
답변
주어진 스레드에서 실행중인 코드는 코드 및/또는 C/C++ 런타임 또는 사용 된 다른 라이브러리에서 공유 데이터 구조의 상태를 손상시키지 않고 임의의 지점에서 중지 할 수 없습니다.
코드는 잘 정의 된 지점에서만 멈출 수 있습니다.
(당신이 QThread
에서 파생하지 않거나 그 run
를 오버라이드 (override)하지 않는 경우, 즉 보통) 그것으로 안전 이벤트 루프로 제어를 반환하면, 다음 QThread::quit()
스레드를 중지 스레드는 이벤트 루프를 실행하는 경우 그렇게해라. 스레드의 재 구현이 실행이 루프를 실행하면 중단 요청했을 때
, 그것은 반환해야합니다 :
void MyThread::run() {
while (! isInterruptionRequested()) {
...
}
}
이러한 스레드는 QThread::requestInterruption()
에 의해 stoppable입니다.
wait()
호출 스레드를 차단 호출 스레드가 완료 될 때까지 :참고로, 여기에 때때로 혼란
QThread
의 다양한 방법이 있습니다. 물론 스레드 자체에서 호출하는 것은 즉각적인 교착 상태입니다. 스레드는 결코 발생하지 않을 무언가를 기다리는 경우 완료 할 수 없습니다.quit()
은 가능한 한 빨리 스레드의 이벤트 루프를 종료하고QThread::run()
을 반환합니다.run()
을 다시 구현하고 이벤트 루프를 돌리지 않으면 아무 작업도 수행하지 않습니다.requestTermination()
은 의 맞춤 루프가isTerminationRequested()
을 통해 확인할 수있는 플래그를 설정합니다.terminate()
스레드를 중지합니다. 이제입니다. 이것은 일반적으로 응용 프로그램의 상태를 손상 시키므로 언제든지abort()
이 곧 발생하거나 그 결과에 직면해야합니다. 이 방법은 잊어 버리는 것이 가장 좋습니다. 근본적으로 "곧이 프로세스가 중단되고 일부 디스크 데이터가 손상 될 수 있습니다"라는 의미입니다.
몇 가지 코드를 제공 할 수 있습니까? 지금 당신이 의미하는 것이 명확하지 않습니다. 알다시피, msleep 메서드는 즉시 스레드의 작업을 일시 중지합니다. 그것은 당신이 원하는 것입니까? –
_ "칼처럼 커야합니다."_ O_o –
QThread의 실행 기능이 신호를 내 보냅니다. 나는 신호로 방출 된 알렉스 작품을 끝내고 싶다. –