]> AND Private Git Repository - loba.git/blob - msg_thread.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Use git diff instead of diff-index for setlocalversion.
[loba.git] / msg_thread.h
1 #ifndef MSG_THREAD_H
2 #define MSG_THREAD_H
3
4 #include <string>
5 #include <simgrid/msg.h>
6 #include "simgrid_features.h"
7 #include "synchro.h"
8
9 class msg_thread {
10 public:
11     msg_thread();
12     msg_thread(const char* name);
13     virtual ~msg_thread();
14
15     void start();
16     void wait();
17
18     virtual void run() = 0;
19
20 private:
21     bool started;
22     mutex_t mutex;
23     condition_t cond;
24     msg_process_t thread;
25     std::string thread_name;
26
27     void run_wrapper();
28     static int start_wrapper(int, char* []);
29 };
30
31 template <typename Func>
32 class msg_thread_wrapper: public msg_thread {
33 public:
34     msg_thread_wrapper(const char* name, Func run)
35         : msg_thread(name)
36         , real_run(run)
37     { }
38     void run() { real_run(); }
39 private:
40     Func real_run;
41 };
42
43 template <typename Func>
44 msg_thread* new_msg_thread(const char* name, Func run)
45 {
46     return new msg_thread_wrapper<Func>(name, run);
47 }
48
49 #endif // !MSG_THREAD_H
50
51 // Local variables:
52 // mode: c++
53 // End: