PaCO++
0.05
|
00001 #ifndef __PACO_thread__ 00002 #define __PACO_thread__ 00003 00004 #include "FabriqueManagerTpl.h" 00005 #include <string> 00006 #include <map> 00007 #include <iostream> 00008 00009 using namespace std; 00010 00012 00013 class paco_mutex 00014 { 00015 public: 00016 virtual ~paco_mutex() {}; 00017 00018 virtual void lock() = 0; 00019 virtual void unlock() = 0; 00020 }; 00021 00023 00024 class paco_condition 00025 { 00026 public: 00027 virtual ~paco_condition() {}; 00028 00029 virtual void wait() = 0; 00030 virtual void signal() = 0; 00031 }; 00032 00034 00035 class paco_thread 00036 { 00037 public: 00038 virtual ~paco_thread() {}; 00039 virtual void detach() {}; 00040 }; 00041 00045 00047 // Abstract class to be implemeted by each fabrique 00048 class paco_fabrique_thread { 00049 00050 public: 00051 virtual ~paco_fabrique_thread() {} 00052 00053 virtual paco_mutex* paco_create_mutex()=0; 00054 virtual paco_condition* paco_create_condition(paco_mutex * mutex)=0; 00055 // Create a joinable thread 00056 virtual paco_thread * paco_create_thread(void* (*fn)(void*), void* arg = NULL)=0; 00057 // create a detached thread 00058 virtual paco_thread * paco_create_thread(void (*fn)(void*), void* arg = NULL)=0; 00059 }; 00060 00061 // The thread fabrique 00062 typedef paco_fabrique_manager_tpl<paco_fabrique_thread> paco_fabrique_manager_thread; 00063 00064 #endif