2016-07-26 3 views
0

이것은 가상의 질문입니다. 나는 프로그램에 대해 몇 가지 문제를 겪고 있으며 멀티 스레딩 (multithreading) 때문인지 궁금해하고 있습니다.멀티 스레딩 문제

메인 스레드와 작업자 스레드가 있습니다. 작업자 스레드는 직렬 포트를 통해 기계와 통신하고 기계에서 출력을 수신하면 Pyqt 신호를 내 보냅니다. 메인 스레드에는 신호를 수신하고 그 출력을 처리하는 슬롯이 있습니다. 처리는 출력에서 ​​다른 오브젝트를 작성하는 것을 포함하는 긴 프로세스입니다.

첫 번째 출력이 처리되기 전에 작업 스레드가 주 스레드를 두 번 호출하는 경우 어떻게됩니까?

+0

'방출 신호'란 무엇입니까? PyQt 신호를 언급하고 있습니까? – jweyrich

+0

예, 미안합니다. 제 질문에 미안합니다. –

답변

1

주 스레드가 (이벤트에서 생성 된) 긴 작업을 실행하는 동안 새 이벤트를 처리하지 않습니다. 모든 새 이벤트는 스레드 특정 큐에 대기되며 이벤트 루프가 실행될 때 나중에 처리됩니다. 대상 스레드가 슬리핑이면 새 이벤트가 대기열에 추가되고 스레드는 처리를 위해 각성합니다.

The Event System에 대한 설명서를 읽을 수 있습니다.

+2

요점은 크로스 스레드 신호가 이벤트로 랩핑되고 수신 슬롯이있는 스레드의 이벤트 대기열에 게시된다는 것입니다. 제어 장치가 이벤트 루프로 돌아가고 대기중인 신호 이벤트가 처리 될 때 슬롯이 호출됩니다 (방출 된 순서대로 발생 함). – ekhumoro