PaCO++
0.05
|
00001 #include "paco_thread.h" 00002 00003 extern "C" { 00004 #include <Padico/PM2.h> 00005 } 00006 00007 class paco_marcel_mutex; // forward declaration 00008 00009 class paco_marcel_condition : public paco_condition 00010 { 00011 public: 00012 paco_marcel_condition(paco_marcel_mutex* m); 00013 ~paco_marcel_condition(); 00014 00015 void wait(); 00016 void signal(); 00017 00018 private: 00019 marcel_cond_t condition; 00020 paco_marcel_mutex * mutex; 00021 }; 00022 00023 00024 class paco_marcel_mutex : public paco_mutex 00025 { 00026 00027 public: 00028 paco_marcel_mutex(); 00029 ~paco_marcel_mutex(); 00030 00031 void lock(); 00032 void unlock(); 00033 00034 private: 00035 marcel_mutex_t mutex; 00036 00037 friend void paco_marcel_condition::wait(); 00038 }; 00039 00040 class paco_marcel_fabrique : virtual public paco_fabrique_thread { 00041 00042 public: 00043 paco_mutex* paco_create_mutex(); 00044 paco_condition* paco_create_condition(paco_mutex * mutex); 00045 // Create a joinable thread 00046 paco_thread * paco_create_thread(void* (*fn)(void*), void* arg = NULL); 00047 // Create a detach thread 00048 paco_thread * paco_create_thread(void (*fn)(void*), void* arg = NULL); 00049 }; 00050 00051 class paco_marcel_thread : public paco_thread 00052 { 00053 public: 00054 paco_marcel_thread(); 00055 virtual ~paco_marcel_thread(); 00056 00057 private: 00058 marcel_t thread; 00059 00060 friend paco_thread * paco_marcel_fabrique::paco_create_thread(void* (*fn)(void*), void* arg = NULL); 00061 friend paco_thread * paco_marcel_fabrique::paco_create_thread(void (*fn)(void*), void* arg = NULL); 00062 };