私はワーカースレッド内にあり、指定された時間(通常は数百ミリ秒)スリープ状態にしたいが、スリープは中断可能でなければならない。ここでは、私は少し複雑に見えますが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
をタイムアウト待ちで使用していますか?
根拠/背景を教えていただけますか?待機条件やmutexのようなものは、重いPOSIXのように聞こえます。対照的に、私のループには基本的な睡眠しかありません。 –
QWaitCondition :: wait(タイムアウト)の場合は、単に 'mutex'を使う必要はありません。 –
@ JohannesSchaub-litb私はそれがタイマーではあなたのプロセスが起きることはなく、代わりにあなたのプロセスが中断される必要があることを検出するOSスケジューラーだからだと思います。また、これはより良いレイテンシを持っています。あなたのループでは、イベントを処理するために目を覚ます前に、あなたのタイムアウト/ 2の平均レイテンシがあります。 – sashoalm