サーバーを呼び出す Qt を使用してライブラリを構築しています。HTTP 応答 (QNetworkReply オブジェクト) を待機する同期関数を構築する必要があり、これを実現するために QEventLoop を使用しています。現在、サーバーは呼び出されますが、ループは応答が終了するのを待たず、代わりに空の QNetworkReply オブジェクトを続行します。
まったく同じ関数が、1 つのスレッドと main からこの関数への呼び出しのみを含む、私が構築した単純なテスト プロジェクトで機能します。返信が待たれ、すべてが期待どおりに機能します。しかし、複数のスレッドを含む私のプロジェクトでは、上記のシナリオが発生し、イベント ループは応答を待ちません。要求はサーバーに送信され、そこに表示されますが、関数が既に実行されているため、応答が QNetworkReply オブジェクトに返されません。
これが私の機能のネットワークセクションです。私のプロジェクトでは、statusCode 変数は常に 0 になり、応答は空になりますが、単純なテスト シナリオでは 200 であり、期待される HTTP 応答です。
QNetworkAccessManager* networkManager = new QNetworkAccessManager(this);
QNetworkReply* reply = networkManager->get(request);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
qInfo() << "Http Get completed with status code:" << statusCode.toInt();