내 코드에서 작업자 스레드는 GUI 스레드로 신호를 내 보냅니다. 신호와 슬롯은 Qt :: BlockingQueuedConnection을 통해 연결됩니다.qt 신호 슬롯 다중 스레드 교착 상태
closeEvent
응용 프로그램이 작업자 스레드를 중지하려고 시도하는 중에 이벤트 만 완료하면.
그것은 작업자 스레드의 함수 호출 나아가서는 검사의
void stop() {
_isFinished = true;
wait();
}
작업자 스레드 _isFinished
조건과이 설정되지 않은 경우, 상기 신호를 방출한다.
분명, 두 스레드가 고정 될 다음과 같은 상황
The worker Gui Thread
================= =================
if (!_isFinished) -----------------
----------------- _isFinished = true;
----------------- wait();
emit mySignal(); -----------------
이미징 - 교착 상태.
뮤텍스를 추가하면 다른 교착 상태가 발생할 수 있습니다. 작업자가 뮤텍스를 잠그면 GUI 스레드가 차단됩니다. 결과적으로 방출 된 신호는 작업자를 잠급니다.
어떻게 처리 할 수 있습니까?
QueuedConnection 대신 BlockingQueuedConnection을 사용하는 특별한 이유가 있습니까? –
예, 신호에 연결된 슬롯이 메모리 개체를 해제해야하기 때문에 중요합니다. 그렇지 않은 경우 메모리 오버플로가 발생합니다. – user14416