我在一個工作線程中,想睡一段指定的時間(通常是幾百毫秒),但睡眠應該是可以中斷的。以下是我想出了Qt中的可中斷睡眠?
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
-等待更好的解決方案?
你能給一個理由/一些背景嗎?像等待條件和互斥體聽起來像重POSIX的東西。相反,在我的循環中只有基本的睡眠。 – 2012-04-05 12:08:47
只需'如果QWaitCondition :: wait(timeout)'就不需要任何互斥體。 – 2012-04-05 12:16:25
@ JohannesSchaub-litb我認爲這是因爲有了計時器,你的進程永遠不會醒來,相反它是OS調度程序,可以檢測你的進程何時需要中斷。此外,這有一個更好的延遲,隨着你的循環,在你處理一個事件之前,你的超時/ 2的平均延遲將會被調整。 – sashoalm 2012-04-05 12:17:46