7 #include "wvsubprocqueue.h"
14 maxrunning = _maxrunning;
18 WvSubProcQueue::~WvSubProcQueue()
26 assert(!proc->running);
30 EntList::Iter i(waitq);
31 for (i.rewind(); i.next(); )
33 if (i->cookie == cookie)
49 waitq.append(
new Ent(cookie, proc),
true);
54 const char *cmd,
const char *
const *argv)
57 p->preparev(cmd, argv);
62 bool WvSubProcQueue::cookie_running()
64 EntList::Iter i(runq);
65 for (i.rewind(); i.next(); )
81 EntList::Iter i(runq);
82 for (i.rewind(); i.next(); )
86 e->proc->wait(0,
true);
87 if (!e->proc->running)
95 waitq.append(e,
true);
103 while (!waitq.isempty() && runq.count() < maxrunning)
105 EntList::Iter i(waitq);
106 for (i.rewind(); i.next(); )
112 if (i->cookie && !runq.isempty())
114 if (cookie_running())
121 runq.append(e,
true);
122 e->proc->start_again();
129 assert(runq.count() <= maxrunning);
142 return runq.count() + waitq.count();
148 return runq.isempty() && waitq.isempty();
unsigned running() const
Return the number of currently running processes.
bool isempty() const
True if there are no unfinished (ie. running or waiting) processes.
unsigned remaining() const
Return the number of unfinished (ie. running or waiting) processes.
int go()
Clean up after any running processes in the queue, and start running additional processes if any are ...
WvSubProcQueue(unsigned _maxrunning)
Create a WvSubProcQueue.
void add(void *cookie, WvSubProc *proc)
Enqueue a process.
void finish()
Wait synchronously for all processes in the entire queue to finish.