我對QTcpServer如何在線程和阻塞的幕後工作感興趣。 QTcpServer
有一個listen()
方法立即返回。如果收聽成功,服務器將發出信號newConnection()
。我感興趣的是當listen()
方法返回時,服務器如何監聽(是否在主線程中)。有QTcpServer既可控制檯應用程序的普通的一個例子是這樣的: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
)現有和運行recive網絡事件。如果沒有調用QCoreApplication::exec()
,它可以正常工作嗎?
非常好。現在我明白爲什麼在執行Qt中的應用程序事件循環之前調用listen(我使用PyQt)確實沒有得到'newConnection'信號。感謝您的挖掘。 – Trilarion 2015-10-20 21:28:24