Salome HOME
9337cc03a0028f036cd66af7df55df59eed2fb1d
[modules/yacs.git] / src / engine / Executor.hxx
1 #ifndef __EXECUTOR_HXX__
2 #define __EXECUTOR_HXX__
3
4 #include "Mutex.hxx"
5 #include "Thread.hxx"
6 #include "Semaphore.hxx"
7
8 #include <list>
9
10 namespace YACS
11 {
12   namespace ENGINE
13   {
14     class Scheduler;
15     class Task;
16     
17     class Executor
18     {
19     protected:
20       Scheduler *_mainSched;
21       int _nbOfConcurrentThreads;
22       YACS::BASES::Mutex _mutexForNbOfConcurrentThreads;
23       YACS::BASES::Semaphore _semForNewTasksToPerform;
24       YACS::BASES::Mutex _mutexForSchedulerUpdate;
25       pthread_cond_t _cond;
26       std::list< YACS::BASES::Thread * > _groupOfAllThreadsCreated;
27     public:
28       Executor();
29       ~Executor();
30       void RunW(Scheduler *graph);
31       int getNbOfThreads();
32     protected:
33       void launchTask(Task *task);
34       void wakeUp();
35       void sleepWhileNoEventsFromAnyRunningTask();
36       void notifyEndOfThread(YACS::BASES::Thread *thread);
37     protected:
38       static void *functionForTaskExecution(void *);
39     };
40   }
41 }
42
43 #endif