VC 使用事件

在一个类当中声明一个CEvent对象,就可以通过设置这个对象的信号状态来控制线程之间的同步。

 

线程的创建用到了AfxBeginThread.

 

相应于这个函数的线程函数的格式为 UINT yourFunc(LPVOID lparam);

这要在创建线程方法中,判断一下线程是否为NULL,如果不为NULL,就创建线程,而对应于结束线程方法中,也是如此,如果为NULL,直接return ,如果不为NULL,就用

 

假设线程为类的字段: CWinThread m_pThread;

 

waitForSingleObject(m_pThread, INIFITE);

delete m_pThread;

m_pThread = NULL;

 

 

对于创建线程的方法中,在判断完m_pThread ==/!= NULL 之后,就设置m_pEvent->resetEvent();使这个事件对象变为无信号状态。当然在此之前的AfxBeginThread中的标记为设为CREATE_SUSPEND, 并

m_pThread.bAutoDelete = FALSE;

m_pThread.resumeThread();

 

而在线程函数中就要用到下面的方法来判断什么时候终止。

//WAIT_OBJECT_0 表示时间处于有信号状态

if(waitForSingleObject(m_pEvent->m_hObject , 0) == WAIT_OBJECT_0){

     //这个时候表明线程该终止了,因为在结束线程的方法里,设置了m_pEvent->setEvent();

}

 

 

在结束线程的方法里:

就调用:

m_pEvent->setEvent();

::WaitForSingleObject(m_pThread , INIFITE);

delete m_pThread;

m_pThread =NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值