Hello JUCErs,
I have the following problem:
- I have a high-priority thread (level 8 - 10) which is supposed to run a specific job every 10 milliseconds.
- The job doesn’t take that long (under 1 millisecond on both Windows and Mac OS X);
- The thread is being paused between runs for 10 milliseconds, using the Time::waitForMillisecondCounter () function;
- On OS X this is very accurate (deviation is about .04 of a millisecond - just about enough to account for the time spent on the task it executes on this interval) and it runs ~100 times per second;
- [The Problem]: On Windows this same pause takes on average 430 milliseconds which allows the thread to run only ~2 times per second.
Here is the relevant code to reproduce the issue with JUCE 4.3.0 (latest official):
while (shouldRun.get () > 0) // atomic
{
timerCallback();
const double currentTime = Time::getMillisecondCounterHiRes (),
targetTimeToWaitUntil = currentTime + interval; // interval is 10 milliseconds
Time::waitForMillisecondCounter (targetTimeToWaitUntil);
}
I am testing on Windows 8.1 64bit, with a 64bit VST plugin running within the Plugin Host example of the JUCE library.
How do I make this consistently work on both OS X and Windows (keeping the accuracy of OS X, of course)?

