36 if (!
pool.runNextJob (*
this))
87 return t->currentJob.load();
113 for (
int i =
jmax (1, numThreads); --
i >= 0;)
123 t->signalThreadShouldExit();
134 if (job->
pool ==
nullptr)
156 JobStatus runJob()
override {
return job(); }
161 addJob (
new LambdaJobWrapper (jobToRun),
true);
168 LambdaJobWrapper (std::function<
void()>
j) :
ThreadPoolJob (
"lambda"), job (
j) {}
171 std::function<
void()> job;
174 addJob (
new LambdaJobWrapper (jobToRun),
true);
212 if (index > 0 && ! job->isActive)
213 jobs.move (index, 0);
236 bool dontWait =
true;
243 if (
jobs.contains (job))
247 if (interruptIfRunning)
254 jobs.removeFirstMatchingValue (job);
274 for (
int i =
jobs.size(); --
i >= 0;)
276 auto* job =
jobs.getUnchecked(
i);
278 if (selectedJobsToRemove ==
nullptr || selectedJobsToRemove->
isJobSuitable (job))
282 jobsToWaitFor.
add (job);
284 if (interruptRunningJobs)
285 job->signalJobShouldExit();
301 for (
int i = jobsToWaitFor.
size(); --
i >= 0;)
309 if (jobsToWaitFor.
size() == 0)
326 for (
auto* job :
jobs)
327 if (job->isActive || ! onlyReturnActiveJobs)
328 s.add (job->getJobName());
338 if (!
t->setPriority (newPriority))
351 for (
int i = 0;
i <
jobs.size(); ++
i)
353 if (
auto* job =
jobs[
i])
365 job->isActive =
true;
398 if (
jobs.contains (job))
400 job->isActive =
false;
404 jobs.removeFirstMatchingValue (job);
429 deletionList.
add (job);
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_Array.h:56
ElementType getUnchecked(int index) const
Definition juce_Array.h:252
int size() const noexcept
Definition juce_Array.h:215
void remove(int indexToRemove)
Definition juce_Array.h:767
void add(const ElementType &newElement)
Definition juce_Array.h:418
Definition juce_OwnedArray.h:51
ObjectClass * add(ObjectClass *newObject)
Definition juce_OwnedArray.h:294
Definition juce_StringArray.h:35
Definition juce_String.h:53
static int getNumCpus() noexcept
Definition juce_SystemStats.cpp:104
Definition juce_Thread.h:181
static Thread *JUCE_CALLTYPE getCurrentThread()
Definition juce_Thread.cpp:160
bool wait(int timeOutMilliseconds) const
Definition juce_Thread.cpp:299
Thread(const String &threadName, size_t threadStackSize=0)
Definition juce_Thread.cpp:26
bool threadShouldExit() const
Definition juce_Thread.cpp:177
Definition juce_ThreadPool.h:192
virtual bool isJobSuitable(ThreadPoolJob *job)=0
void moveJobToFront(const ThreadPoolJob *jobToMove) noexcept
Definition juce_ThreadPool.cpp:206
void createThreads(int numThreads, size_t threadStackSize=0)
Definition juce_ThreadPool.cpp:111
void addToDeleteList(OwnedArray< ThreadPoolJob > &, ThreadPoolJob *) const
Definition juce_ThreadPool.cpp:423
void addJob(ThreadPoolJob *job, bool deleteJobWhenFinished)
Definition juce_ThreadPool.cpp:129
OwnedArray< ThreadPoolThread > threads
Definition juce_ThreadPool.h:325
friend class ThreadPoolJob
Definition juce_ThreadPool.h:324
ThreadPoolJob * pickNextJobToRun()
Definition juce_ThreadPool.cpp:344
void stopThreads()
Definition juce_ThreadPool.cpp:120
CriticalSection lock
Definition juce_ThreadPool.h:327
int getNumThreads() const noexcept
Definition juce_ThreadPool.cpp:183
ThreadPoolJob * getJob(int index) const noexcept
Definition juce_ThreadPool.cpp:188
int getNumJobs() const noexcept
Definition juce_ThreadPool.cpp:177
bool runNextJob(ThreadPoolThread &)
Definition juce_ThreadPool.cpp:375
bool removeAllJobs(bool interruptRunningJobs, int timeOutMilliseconds, JobSelector *selectedJobsToRemove=nullptr)
Definition juce_ThreadPool.cpp:263
WaitableEvent jobFinishedSignal
Definition juce_ThreadPool.h:328
ThreadPool(int numberOfThreads, size_t threadStackSize=0)
Definition juce_ThreadPool.cpp:93
~ThreadPool()
Definition juce_ThreadPool.cpp:105
StringArray getNamesOfAllJobs(bool onlyReturnActiveJobs) const
Definition juce_ThreadPool.cpp:321
bool isJobRunning(const ThreadPoolJob *job) const noexcept
Definition juce_ThreadPool.cpp:200
bool setThreadPriorities(int newPriority)
Definition juce_ThreadPool.cpp:333
bool removeJob(ThreadPoolJob *job, bool interruptIfRunning, int timeOutMilliseconds)
Definition juce_ThreadPool.cpp:234
bool contains(const ThreadPoolJob *job) const noexcept
Definition juce_ThreadPool.cpp:194
bool waitForJobToFinish(const ThreadPoolJob *job, int timeOutMilliseconds) const
Definition juce_ThreadPool.cpp:216
Array< ThreadPoolJob * > jobs
Definition juce_ThreadPool.h:321
void signalJobShouldExit()
Definition juce_ThreadPool.cpp:68
ListenerList< Thread::Listener, Array< Thread::Listener *, CriticalSection > > listeners
Definition juce_ThreadPool.h:138
std::atomic< bool > isActive
Definition juce_ThreadPool.h:137
std::atomic< bool > shouldBeDeleted
Definition juce_ThreadPool.h:137
std::atomic< bool > shouldStop
Definition juce_ThreadPool.h:137
JobStatus
Definition juce_ThreadPool.h:71
@ jobHasFinished
Definition juce_ThreadPool.h:72
@ jobNeedsRunningAgain
Definition juce_ThreadPool.h:75
ThreadPool * pool
Definition juce_ThreadPool.h:136
void setJobName(const String &newName)
Definition juce_ThreadPool.cpp:63
String getJobName() const
Definition juce_ThreadPool.cpp:58
void addListener(Thread::Listener *)
Definition juce_ThreadPool.cpp:74
virtual ~ThreadPoolJob()
Definition juce_ThreadPool.cpp:51
String jobName
Definition juce_ThreadPool.h:135
static ThreadPoolJob * getCurrentThreadPoolJob()
Definition juce_ThreadPool.cpp:84
void removeListener(Thread::Listener *)
Definition juce_ThreadPool.cpp:79
ThreadPoolJob(const String &name)
Definition juce_ThreadPool.cpp:47
static uint32 getMillisecondCounter() noexcept
Definition juce_Time.cpp:241
int * l
Definition inflate.c:1579
struct huft * t
Definition inflate.c:943
register unsigned j
Definition inflate.c:1576
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
static const char * name
Definition pugl.h:1582
virtual ASIOError start()=0
Definition carla_juce.cpp:31
CriticalSection::ScopedLockType ScopedLock
Definition juce_CriticalSection.h:186
unsigned int uint32
Definition juce_MathsFunctions.h:45
constexpr Type jmax(Type a, Type b)
Definition juce_MathsFunctions.h:94
Definition juce_ThreadPool.cpp:27
std::atomic< ThreadPoolJob * > currentJob
Definition juce_ThreadPool.cpp:40
void run() override
Definition juce_ThreadPool.cpp:33
ThreadPool & pool
Definition juce_ThreadPool.cpp:41
ThreadPoolThread(ThreadPool &p, size_t stackSize)
Definition juce_ThreadPool.cpp:28
void DWORD stackSize
Definition swell-functions.h:807
uch * p
Definition crypt.c:594
int result
Definition process.c:1455
#define void
Definition unzip.h:396
#define const
Definition zconf.h:137