#include <stdint.h>
-class ForkBase
+class ForkBase : public Mutex
{
public:
enum { EXIT_CODE=0x7fff };
ForkBase();
virtual ~ForkBase();
- int is_running();
- int read_timeout(int ms, int fd, void *data, int bytes);
- int read_parent(int ms);
+ virtual int is_running() = 0;
+ void send_bfr(int fd, const void *bfr, int len);
+ int read_timeout(int64_t usec, int fd, void *data, int bytes);
+
+ int read_parent(int64_t usec);
int send_parent(int64_t value, const void *data, int bytes);
- int read_child(int ms);
+ int read_child(int64_t usec);
int send_child(int64_t value, const void *data, int bytes);
- int done, pid;
+ int parent_done;
+ int ppid, pid;
ForkChild *child;
int child_fd;
public:
ForkChild();
virtual ~ForkChild();
- virtual void run() = 0;
- virtual int handle_child();
- int child_iteration();
+ virtual int child_iteration(int64_t usec) = 0;
+ int is_running();
+ virtual void run() {}
};
class ForkParent : public Thread, public ForkBase
virtual ~ForkParent();
virtual int handle_parent();
virtual ForkChild *new_fork() = 0;
+ int is_running();
void start_child();
void start();
void stop();
void run();
int parent_iteration();
-
- Mutex *lock;
};
#endif