質問: 0); private: Ui::MainWindow *ui; private slots: // 水平スライダー変更時のSLOT void hSliderReleased(); }; ### 試したこと connectとhSliderReleased()を使ってduringを変更するのではなく playメソッドが水平スライダーの値を直接参照するようにして実行したら 水平スライダーとラベルは停止することなく、滑らかに表示されるようになりました。 この方法で問題点は解消されるのですが、 connectとhSliderReleased()を使ってduringを変更する方法を採用したいのです。 ### 補足情報(FW/ツールのバージョンなど) 【OS】Ubuntu 18.04 【開発環境】Qt Creator 4.6.2 Based on Qt 5.10.1
回答: こんにちは。 play()関数でsleep中ずっとmutexを確保していますので、hSliderReleased()にてmutexを獲得できるタイミングがほんの僅かしかありません。つまりhSliderReleased()はほとんどの時間、mutex開放を待ってしまい、処理が滞ってしまいます。 mutexで保護する時は、sleepなどでCPUを開放する部分は保護しないのがある意味「鉄則」です。 play()関数ではduringをmutexで保護してローカル変数へ獲得後、mutexを開放してからsleepしましょう。