| @@ -1146,15 +1146,23 @@ struct HighResolutionTimer::Pimpl | |||||
| { | { | ||||
| if (periodMs != newPeriod) | 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 | else | ||||
| jassertfalse; | |||||
| { | |||||
| periodMs = newPeriod; | |||||
| shouldStop = false; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -1191,12 +1199,19 @@ private: | |||||
| void timerThread() | void timerThread() | ||||
| { | { | ||||
| Clock clock (periodMs); | |||||
| int lastPeriod = periodMs; | |||||
| Clock clock (lastPeriod); | |||||
| while (! shouldStop) | while (! shouldStop) | ||||
| { | { | ||||
| clock.wait(); | clock.wait(); | ||||
| owner.hiResTimerCallback(); | owner.hiResTimerCallback(); | ||||
| if (lastPeriod != periodMs) | |||||
| { | |||||
| lastPeriod = periodMs; | |||||
| clock = Clock (lastPeriod); | |||||
| } | |||||
| } | } | ||||
| periodMs = 0; | periodMs = 0; | ||||