0

私のqtサーバーアプリケーションでリクエストを処理するとき、「リソース」が解放されるのを待たなければならないことがあります。私の理解では、スロット実装でスリープするとメッセージループが停止するため、これはおそらく期待どおりに機能しません。

void MyClass::mySlot(/*some params here*/)
{
    while (resource.busy())
    {
        QThread::sleep(50);
        if (timeout)
            break;
    }
    if (!timeout) 
        doWork();
}

QTimer を singleShot などで使用することを考えました。私の調査によると、タイマーの信号を介してパラメーターを渡すことはできません。

私の次のアプローチは、リクエストごとに新しいオブジェクトのインスタンスを作成し、このリクエストにパラメータを設定し、このオブジェクトをタイマー シグナルの受信者として使用することです。このスロットでは、リクエスト オブジェクトへの参照を保存していない (保存したくない) ため、リクエスト オブジェクトを削除する必要があります。

void MyClass::mySlot(/*some params here*/)
{
    Request* request;
    request->setParams(...);
    request->processRequest();
}

void Request::processRequest()
{
    if (resource.busy())
    {
        // timeout missing in example/pseudocode
        QTimer::singleShot(50, this, SLOT(processRequest()));
    }
    else
    {
        doWork();
        delete this; // allowed by C++, but ugly. allowed by qt? better approach?
    }
}

リクエストオブジェクトを解放するためのより良いアプローチ、または私の問題に対するより良いアプローチはありますか? delete this;そうでない場合:このコンテキストでの使用は有効ですか?

4

1 に答える 1