00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00034
#if !defined( _THREADS_1__WIN32__OS_THREAD_HPP_ )
00035
#define _THREADS_1__WIN32__OS_THREAD_HPP_
00036
00037
#define WIN32_LEAN_AND_MEAN
00038
#include <windows.h>
00039
00040
#include <cpp_util_2/h/nocopy.hpp>
00041
00042
#include <threads_1/h/threads.hpp>
00043
00044
namespace threads_1
00045 {
00046
00050
class _os_thread_t :
00051
public cpp_util_2::nocopy_t
00052 {
00053
protected :
00055
00063 HANDLE
m_tid;
00064
00066
00070 thread_t *
m_controlled_obj;
00071
00072
public :
00073
_os_thread_t()
00074 :
00075
m_tid( 0 ),
00076
m_controlled_obj( 0 ),
00077
m_cv(
m_sem )
00078 {
00079 }
00080 ~
_os_thread_t()
00081 {
00082
if( m_tid )
00083 CloseHandle( m_tid );
00084 }
00085
00087
00091
void
00092 set_controlled_obj(
00093
thread_t * obj )
00094 {
00095
m_controlled_obj = obj;
00096 }
00097
00099
void
00100
start();
00101
00103
void
00104 wait()
00105 {
00106 WaitForSingleObject(
m_tid, INFINITE );
00107 }
00108
00109
protected :
00115 mutex_sem_t m_sem;
00119 cond_var_t m_cv;
00120
00121
#ifdef _MSC_VER
00122
static void __cdecl start_thread(
_os_thread_t * pthread );
00123
#else
00124
static void start_thread(
_os_thread_t * pthread );
00125
#endif
00126
};
00127
00130
00137
inline void
00138
_os_sleep_thread(
unsigned long msec )
00139 {
00140 Sleep( msec );
00141 }
00142
00143 }
00144
00145
#endif