Я в рабочем потоке и хочу спать в течение определенного периода времени (обычно несколько сотен миллисекунд), но сон должен прерываться. Вот что я придумалПрерывающий сон в 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. Напротив, в моей петле есть только основные сна. –
Вам не нужен мьютекс, только если «QWaitCondition :: wait (timeout)». –
@ JohannesSchaub-litb Я думаю, это потому, что с помощью таймера ваш процесс никогда не просыпается, а именно планировщик ОС, который обнаруживает, когда ваш процесс должен быть прерван. Кроме того, у этого есть лучшая латентность, с вашим циклом будет средняя латентность вашего таймаута/2, прежде чем вы проснетесь, чтобы обработать событие. – sashoalm