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()