#include
<
Windows.h
>
#include < iostream >
DWORD WINAPI threadProc(LPVOID lpParameter);
class CThread
{
public :
CThread()
{
m_hEvent = ::CreateEvent(NULL, true , false , NULL);
m_hThread = ::CreateThread(
NULL,
0 ,
threadProc,
this ,
0 ,
NULL);
// ::SetEvent(m_hEvent);
}
~ CThread()
{
::CloseHandle(m_hEvent);
::CloseHandle(m_hThread);
}
public :
// 线程结束事件
void waitFor(DWORD dwTime)
{
::SetEvent(m_hEvent);
::WaitForSingleObject(m_hThread, dwTime);
}
public :
HANDLE m_hThread;
HANDLE m_hEvent;
};
DWORD WINAPI threadProc(LPVOID lpParameter)
{
CThread * pThread = static_cast < CThread *> (lpParameter);
if (pThread == NULL)
{
return 0 ;
}
while ( 1 )
{
char ch[ 10 ] = { 0 };
static long cnts = 0 ;
sprintf_s(ch, 10 , " %d\n " ,cnts ++ );
ch[ 9 ] = ' \0 ' ;
DWORD ret = ::WaitForSingleObject(pThread -> m_hEvent, 1000 );
if (ret == WAIT_TIMEOUT)
{
::OutputDebugStringA(ch);
}
else if (ret == WAIT_OBJECT_0)
{
::OutputDebugStringA( " 线程结束\n " );
}
else if (ret == WAIT_ABANDONED)
{
::OutputDebugStringA( " 线程出错\n " );
}
}
return - 1 ;
}
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
CThread thread;
int cnts = 0 ;
while (cnts ++ < 500 )
{
::Sleep( 1 );
}
thread.waitFor( 3000 );
return 0 ;
}
#include < iostream >
DWORD WINAPI threadProc(LPVOID lpParameter);
class CThread
{
public :
CThread()
{
m_hEvent = ::CreateEvent(NULL, true , false , NULL);
m_hThread = ::CreateThread(
NULL,
0 ,
threadProc,
this ,
0 ,
NULL);
// ::SetEvent(m_hEvent);
}
~ CThread()
{
::CloseHandle(m_hEvent);
::CloseHandle(m_hThread);
}
public :
// 线程结束事件
void waitFor(DWORD dwTime)
{
::SetEvent(m_hEvent);
::WaitForSingleObject(m_hThread, dwTime);
}
public :
HANDLE m_hThread;
HANDLE m_hEvent;
};
DWORD WINAPI threadProc(LPVOID lpParameter)
{
CThread * pThread = static_cast < CThread *> (lpParameter);
if (pThread == NULL)
{
return 0 ;
}
while ( 1 )
{
char ch[ 10 ] = { 0 };
static long cnts = 0 ;
sprintf_s(ch, 10 , " %d\n " ,cnts ++ );
ch[ 9 ] = ' \0 ' ;
DWORD ret = ::WaitForSingleObject(pThread -> m_hEvent, 1000 );
if (ret == WAIT_TIMEOUT)
{
::OutputDebugStringA(ch);
}
else if (ret == WAIT_OBJECT_0)
{
::OutputDebugStringA( " 线程结束\n " );
}
else if (ret == WAIT_ABANDONED)
{
::OutputDebugStringA( " 线程出错\n " );
}
}
return - 1 ;
}
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
CThread thread;
int cnts = 0 ;
while (cnts ++ < 500 )
{
::Sleep( 1 );
}
thread.waitFor( 3000 );
return 0 ;
}