#ifndef SCHEDULER_H #define SCHEDULER_H #pragma interface #include "Process.h" #include "sockets.h" extern class Process; typedef struct proc_node { Process* process; struct proc_node *next, *prev; }; // // these parameters need some explaining. when a process starts, it is // given default_max_ticks time cycles total for execution. each pass through // the scheduler runs until the Process structure tells it that it's expended // default_slice_size ticks, then the scheduler goes on to the next process. // to reward 'nice' processes, however, i've set it up so that the process // will get back sleep_return*default_slice_size ticks whenever it executes // a 'sleep' with a 1 second or greater sleep time. // const int default_slice_size = 250; const int default_max_ticks = 50000; const int sleep_return = 3; class Scheduler { friend class Process; friend class Frame; protected: struct proc_node* proc_queue; struct proc_node *tail_pointer; public: Scheduler(); ~Scheduler(); int add_process (int obj_on, Value* mthd_nm, Val_List* actuals, int ticks = default_max_ticks); int rm_process (int pid); void one_cycle (int slice_size = default_slice_size); }; #endif /* SCHEDULER_H */