//
// @(#)Real Time Threads 0.5 prasad@watson.ibm.com:jul97 #include#include #include #include #include #include #include #include #include #include "shmalloc.h" // ---------------------------------------------------------------------------- #include "values.h" // values.h #include "lock.h" // lock.h #include "rtime.h" // rtime.h #include "rthread.h" // rthread.h #include "rtask.h" // rtask.h // ---------------------------------------------------------------------------- class Rtbase : public Lock { char *version; int tasks; // stats int actives; int ids; int pid; // demon's, for wakey wakey int memid; // shmid int woken; // signal latch int sigpause, sigresume; // signals to use (SIGTERM,0=isBusy) RtThread *list, *wakeup; friend class RtThread; public: static Syserror RtError; static Rtbase* Create (const char* path, int size, int mode, int intvl =0) throw (Syserror); static Rtbase* Attach (int shmid) throw (Syserror); int shmid () const { return memid; } int ntasks () const { return tasks; } int nactive () const { return actives; } void Signals (int pause, int resume) { sigpause = pause; sigresume = resume; } void NoSignals () { sigpause = 0; } int Literate () const { return ! sigpause; } // work one queue void RunId (int id, const char* file, char** args) throw (RtThread); // work through all queues ones void RunOnce (const char* file, char** args) throw (); // cron-like loop, set to run every so many ms void Run (char* file, char** args, int msec =10000) throw (); void Wakeup () throw (); void StopAll () throw (); // immediately const char* Version () { return version; } friend ostream& operator << (ostream&, const Rtbase&); }; ostream& operator << (ostream&, const Rtbase&); // ----------------------------------------------------------------------------