我对 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
现有的并且正在运行来接收网络事件。QCoreApplication::exec()
它可以在不被调用的情况下正常工作吗?