스레드 및 차단과 관련하여 QTcpServer가 작동하는 방식에 관심이 있습니다. QTcpServer
에는 즉시 반환하는 listen()
메서드가 있습니다. 청취가 성공적으로 시작되면 서버는 newConnection()
신호를 내 보냅니다. listen()
메서드가 반환되었을 때 서버 수신 대기 (메인 스레드에서의 처리)에 관심이 있습니다.QTcpServer가 실제로 연결을 수신 대기하는 방법
//main.cpp
int main(int argc, char* argv[])
{
QCoreApplication app;
MyServer server;
app.exec();
}
//MyServer.cpp
MyServer::MyServer(QObject *parent) : QObject(parent)
{
this->server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(on_newConnection()));
if (!server->listen(QHostAddress::Any, 1234))
//do something in case of error
}
void MyServer::on_newConnection()
{
QTcpSocket* socket = server->nextPendingConnection();
//do some communication...
}
가에 의존 QTcpServer
하는 QCoreApplication
(또는 어쩌면 QRunLoop
) 기존 및 네트워크 이벤트를 받아 봐을 실행하십시오 QTcpServer와 콘솔 응용 프로그램의 일반적인 예는이 같은 것입니다. QCoreApplication::exec()
이 호출되지 않으면 제대로 작동합니까?
아주 좋습니다. 이제 Qt에서 응용 프로그램 이벤트 루프를 실행하기 전에 (내가 PyQt를 사용하여) 'newConnection' 신호를받지 못하는 이유를 들어 보았습니다. 파고 주셔서 감사합니다. – Trilarion