2013-09-27 5 views
0

나는 간단한 스레드 네트워크 서버를 만들었습니다. main.cpp는 app.exec()를 유휴 상태로 호출하고 연결이 설정되면 스레드는 예상대로 작동하지 않습니다. 스레드의 run() 함수에서 QThread 내부에서 신호/유휴 신호를 처리하는 방법은 무엇입니까?

, 나는 readCommand라는 슬롯 readyRead에서 신호를 연결 시설 :는 "비공개로

connect(tcpSocketPtr, SIGNAL(readyRead()), this, SLOT(readCommand())); 

내가 클래스의 .H 파일에 readCommand을 정의, 슬롯 "- 클래스 내에서만 호출되기 때문에. 희망이 맞아.

위 연결 후 run() 함수가 반환됩니다. app.exec() 호출 또는 그 밖의 것이 없습니다. 그것이 문제일까요? 스레드가 신호를 수신 대기하도록 일부 함수를 호출해야합니까?

포트로 텍스트를 보내면 readCommand 함수가 실행되지 않습니다 ... 그리고 디버깅하는 방법을 모르겠습니다 .suggestions?

+0

스레드의 이벤트 루프를 시작하려면'run()'본문에서'QThread :: exec()'를 호출해야합니다. 그렇지 않으면 스레드는'run()'의 끝에 도달하면 종료합니다. –

+0

감사합니다! – TSG

+0

@Michelle : 답변을 선택하지 않은 이유는 무엇입니까? 답장에서 누락 된 것은 무엇입니까? – lpapp

답변

0

"클래스는 클래스 내에서 호출되기 때문에 클래스의 .h 파일에 readCommand를 정의했습니다. 희망은 입니다.

예, 올바르게 표시됩니다.

그러나 void QThread::run() [virtual protected] 메서드 내에서 int QThread::exec() [protected]을 사용하면 거의 즉시 반환하는 대신 스레드 실행을 시작할 수 있습니다.