+#ifndef _SCHEDULER_H_
+#define _SCHEDULER_H_
+
+#include <iostream>
+#include <list>
+#include <map>
+#include "Event.h"
+#include "ProcessWrapper.h"
+
+class Scheduler
+{
+ public:
+ Scheduler();
+ virtual ~Scheduler();
+
+ void registerProcess(ProcessWrapper *process);
+ void run();
+ void runProcessWrapper(ProcessWrapper *process);
+ void detachProcess(ProcessWrapper *process);
+ void schedule();
+
+ protected:
+ Mutex *_listsMutex;
+ Condition *_listsCondition;
+ Mutex *_mapsMutex;
+ Condition *_mapsCondition;
+ std::map<ProcessWrapper*, pthread_t* > *_processMap;
+ std::map<ProcessWrapper*, Event* > *_notificationEventMap;
+ std::list<ProcessWrapper* > *_scheduleList;
+ std::list<ProcessWrapper* > *_detachList;
+ bool _stopScheduler;
+ bool _allStarted;
+};
+
+#endif