diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h index 05ed874c76..2636cea5a7 100644 --- a/modules/juce_core/native/juce_posix_SharedCode.h +++ b/modules/juce_core/native/juce_posix_SharedCode.h @@ -1146,15 +1146,23 @@ struct HighResolutionTimer::Pimpl { if (periodMs != newPeriod) { - stop(); - periodMs = newPeriod; + if (thread != pthread_self()) + { + stop(); - shouldStop = false; + periodMs = newPeriod; + shouldStop = false; - if (pthread_create (&thread, nullptr, timerThread, this) == 0) - setThreadToRealtime (thread, (uint64) newPeriod); + if (pthread_create (&thread, nullptr, timerThread, this) == 0) + setThreadToRealtime (thread, (uint64) newPeriod); + else + jassertfalse; + } else - jassertfalse; + { + periodMs = newPeriod; + shouldStop = false; + } } } @@ -1191,12 +1199,19 @@ private: void timerThread() { - Clock clock (periodMs); + int lastPeriod = periodMs; + Clock clock (lastPeriod); while (! shouldStop) { clock.wait(); owner.hiResTimerCallback(); + + if (lastPeriod != periodMs) + { + lastPeriod = periodMs; + clock = Clock (lastPeriod); + } } periodMs = 0;