简单的线程类,采用event通信

#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 ;
}

转载于:https://www.cnblogs.com/lancidie/archive/2011/03/18/1987879.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值