私はワーカースレッドにいて、指定された期間 (通常は数百ミリ秒) スリープしたいのですが、スリープは中断可能でなければなりません。これが私が思いついたものです
void DummyScope::sleepForSamples() {
if(m_sampleSleep < 100) {
MySleeper::sleep(m_sampleSleep);
return;
}
// sleep in periods of 100 ms, to be responsible for shutdown requests
qint64 t = QDateTime::currentMSecsSinceEpoch();
qint64 end = t + m_sampleSleep;
while(t + 100 <= end) {
MySleeper::sleep(100);
t = QDateTime::currentMSecsSinceEpoch();
// TODO: check here whether we are interrupted
}
if(end > t) {
MySleeper::sleep(end - t);
}
}
しかし、それは少し複雑に見えます。これを行うためのより良い方法があるかどうか疑問に思います。QWaitCondition
timeout-waitを使用すると、より良い解決策になりますか?