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))
93 return clients.size();
105 return std::any_of (clients.begin(), clients.end(), [=] (
auto* registered) { return registered == c; });
114 for (
int i = clients.size(); --i >= 0;)
116 auto* c = clients.getUnchecked ((i + index) % clients.size());
118 if (c !=
nullptr && (client ==
nullptr || c->nextCallTime < soonest))
121 soonest = c->nextCallTime;
134 int timeToWait = 500;
143 numClients = clients.size();
144 index = numClients > 0 ? ((index + 1) % numClients) : 0;
146 if (
auto* firstClient = getNextClient (index))
147 nextClientTime = firstClient->nextCallTime;
154 if (nextClientTime > now)
156 timeToWait = (int) jmin ((int64) 500, (nextClientTime - now).inMilliseconds());
160 timeToWait = index == 0 ? 1 : 0;
166 clientBeingCalled = getNextClient (index);
169 if (clientBeingCalled !=
nullptr)
171 const int msUntilNextCall = clientBeingCalled->
useTimeSlice();
175 if (msUntilNextCall >= 0)
178 clients.removeFirstMatchingValue (clientBeingCalled);
180 clientBeingCalled =
nullptr;
static RelativeTime milliseconds(int milliseconds) noexcept
bool wait(double 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)
bool contains(const TimeSliceClient *) const
TimeSliceThread(const String &threadName)
static Time JUCE_CALLTYPE getCurrentTime() noexcept