WvStreams
include/wvsubprocqueue.h
1/* -*- Mode: C++ -*-
2 * Worldvisions Weaver Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
4 *
5 * A class for running a series or set of processes, one at a time.
6 */
7#ifndef __WVSUBPROCQUEUE_H
8#define __WVSUBPROCQUEUE_H
9
10#include "wvsubproc.h"
11
59{
60public:
65 WvSubProcQueue(unsigned _maxrunning);
66
67 virtual ~WvSubProcQueue();
68
78 void add(void *cookie, WvSubProc *proc);
79
84 void add(void *cookie, const char *cmd, const char * const *argv);
85
95 int go();
96
103 void finish();
104
106 unsigned running() const;
107
109 unsigned remaining() const;
110
112 bool isempty() const;
113
114private:
115 struct Ent
116 {
117 Ent(void *_cookie, WvSubProc *_proc)
118 {
119 cookie = _cookie;
120 proc = _proc;
121 redo = false;
122 }
123
124 ~Ent()
125 {
126 if (proc) delete proc;
127 }
128
129 void *cookie;
130 WvSubProc *proc;
131 bool redo;
132 };
133 DeclareWvList(Ent);
134
135 unsigned maxrunning;
136 EntList runq, waitq;
137
138 bool cookie_running();
139};
140
141
142#endif // __WVSUBPROCQUEUE_H
143
void add(void *cookie, const char *cmd, const char *const *argv)
Like add(cookie, proc) but you don't have to build the WvSubProc yourself for simple cases.
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.