私は、いくつかの処理を開始する (ジョブを実行するスレッドを開始する) トリガー関数を呼び出す必要があるライブラリを使用しており、すぐに戻ります。その後、処理が終了すると、シグナルが発行されます。
これは、さまざまなパラメータに基づいて定期的に行う必要があります。処理中にトリガー関数への他の呼び出しを実行してはならないため、何らかの方法でそれらをキューに入れる必要があります。QEventLoop (「ループ」) を使用することを考えましたが、今のところ運がありません。
このコードを見てください:
test::test()
{
connect(&timer, SIGNAL(timeout()), this, SLOT(timerSlot()));
connect(&timer2, SIGNAL(timeout()), this, SLOT(timer2Slot()));
connect(&library, SIGNAL(processingFinished()), &loop, SLOT(quit()));
timer.setInterval(2000);
timer.start();
timer2.setInterval(4000);
timer2.start();
}
void test::timerSlot()
{
loop.exec();
startProcessing(some_parameters);
}
void test::timer2Slot()
{
loop.exec();
startProcessing(some_other_parameters);
}
問題は、処理中に loop.exec() が呼び出されると、次のメッセージが表示されることです。
QEventLoop::exec: instance xxxxxx has already called exec()
私が意図したことを行う正しい方法は何ですか?
前もって感謝します。