2012-08-29 7 views
0

QT에서 Gui 스레드와 QTcpSocket 스레드를 만들었습니다 .QTcpSocket 스레드에서 Gui 스레드로 데이터
에 액세스하려고합니다. 해결 방법은 무엇입니까?
일부 전역 변수를 선언해야합니까?
Qt의 전역 변수 선언

+0

귀하는 답변이 도움이되었다고 말씀하셨습니다. 후속 방문객들이 토론을 할 수 있도록 가장 유용한 답변을 수락 된 것으로 표시해 주시겠습니까? 답변의 왼쪽에있는 투표 버튼 바로 아래에있는 외곽선을 클릭하여 답변을 수락 할 수 있습니다. –

답변

0

가장 쉬운 방법은 신호 슬롯 연결을 통해 통신하는 것입니다. 각 스레드에는 하나의 QObject가 있습니다. 전송 객체에는 다른 스레드에서 수신 객체의 슬롯에 연결된 신호가 있습니다.

이 설정에서는 연결의 양쪽 끝에있는 개체가 올바른 스레드로 살도록 구성되어 있는지 확인합니다. QObject::moveToThread()으로 전화해야 할 수도 있습니다. QObject에는 현재 스레드를 얻을 수있는 속성도 있습니다 (이 경우 디버깅 목적으로).

그런 다음 평소처럼 신호 슬롯 연결을 설정하십시오. 두 객체가 서로 다른 스레드에 있기 때문에 신호가 트리거되면 슬롯 호출 이벤트가 수신 플래그의 이벤트 루프에 배치됩니다. 이것은 Qt 문서에서 설명합니다. Qt::QueuedConnection을 찾으십시오.

+0

많이 고마워요. 저를 아주 많이 도와줍니다. – Jayeeta

0

QTcpSocket은 GUI 스레드에서 생성됩니다.
그래서 그 시점에서 GUI 스레드는 소켓 객체에 대한 포인터를 가지고 있습니다.
그러면 gui의 슬롯과 소켓의 신호 사이에 연결이 생성됩니다.
소켓 개체에서 데이터를 가져올 때마다 gui 스레드가 데이터를 포함하는 신호를 간단히 내 보냅니다.

신호/슬롯을 통해 QString, QByteArray (또는 원시 포인터)와 같은 Qt 유형을 매우 효율적으로 전달할 수 있습니다. 스레드 간의 신호도 자동으로 처리되는 경우 세부 정보입니다.

+0

고마워요. .. 저에게 도움이 .. – Jayeeta