私の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;
そうでない場合:このコンテキストでの使用は有効ですか?