Локальный QEventLoop мешает основному

Я вижу странное поведение при использовании библиотеки qtPromise и QJsonRpc,

Я создаю обещание, которое призывает QJsonRpcSocket::invokeRemoteMethodBlocking(),

внутри QJsonRpcSocket::sendMessageBlocking(const QJsonRpcMessage &message, int msecs) есть местный QEventLoop это выполнено.

QJsonRpcMessage QJsonRpcSocket::sendMessageBlocking(const QJsonRpcMessage &message, int msecs)
{
    Q_D(QJsonRpcSocket);
    QJsonRpcServiceReply *reply = sendMessage(message);
    QScopedPointer<QJsonRpcServiceReply> replyPtr(reply);

    QEventLoop responseLoop;
    connect(reply, SIGNAL(finished()), &responseLoop, SLOT(quit()));
    QTimer::singleShot(msecs, &responseLoop, SLOT(quit()));
    responseLoop.exec();

    if (!reply->response().isValid()) {
        d->replies.remove(message.id());
        return message.createErrorResponse(QJsonRpc::TimeoutError, "request timed out");
    }

    return reply->response();
}

Когда оно выполняется, обещание qt удаляет некоторые мьютексы, которые заблокированы, и это вызывает сбой программы. Так что кажется, что локальный цикл событий мешает основному, и это странно, потому что QtДокументация говорит:

"В любое время вы можете создать объект QEventLoop и вызвать для него exec(), чтобы запустить локальный цикл обработки событий. Из цикла обработки событий вызов exit() заставит exec() вернуться".

Любая помощь / предложение будет оценено.

0 ответов

Другие вопросы по тегам