38 if (client !=
nullptr)
42 clients.addIfNotAlreadyThere (client);
53 if (clientBeingCalled == client)
60 clients.removeFirstMatchingValue (client);
64 clients.removeFirstMatchingValue (client);
83 if (clients.contains (client))
92 return clients.size();
107 for (
int i = clients.size(); --i >= 0;)
109 auto* c = clients.getUnchecked ((i + index) % clients.size());
111 if (client ==
nullptr || c->nextCallTime < soonest)
114 soonest = c->nextCallTime;
127 int timeToWait = 500;
136 numClients = clients.size();
137 index = numClients > 0 ? ((index + 1) % numClients) : 0;
139 if (
auto* firstClient = getNextClient (index))
140 nextClientTime = firstClient->nextCallTime;
147 if (nextClientTime > now)
149 timeToWait = (int) jmin ((int64) 500, (nextClientTime - now).inMilliseconds());
153 timeToWait = index == 0 ? 1 : 0;
159 clientBeingCalled = getNextClient (index);
162 if (clientBeingCalled !=
nullptr)
164 const int msUntilNextCall = clientBeingCalled->
useTimeSlice();
168 if (msUntilNextCall >= 0)
171 clients.removeFirstMatchingValue (clientBeingCalled);
173 clientBeingCalled =
nullptr;
static RelativeTime milliseconds(int milliseconds) noexcept
bool wait(int timeOutMilliseconds) const
bool threadShouldExit() const
bool stopThread(int timeOutMilliseconds)
virtual int useTimeSlice()=0
int getNumClients() const
void removeTimeSliceClient(TimeSliceClient *clientToRemove)
void addTimeSliceClient(TimeSliceClient *clientToAdd, int millisecondsBeforeStarting=0)
~TimeSliceThread() override
TimeSliceClient * getClient(int index) const
void moveToFrontOfQueue(TimeSliceClient *clientToMove)
TimeSliceThread(const String &threadName)
static Time JUCE_CALLTYPE getCurrentTime() noexcept