mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Modified the posix HighResolutionTimer to cope with being started/stopped from its own callback.
This commit is contained in:
parent
ed0bed9af7
commit
6773fc2f4f
1 changed files with 22 additions and 7 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue