线程的同步

使隶属于同一个进程下的各个线程协调一致的工作成为线程同步。MFC提供了多种同步对象,如CEvent、CCriticalSection、CSemephore、CMutex等。另外,MFC也提供了线程同步辅助类CSiingleLock和CMutiLock。通过这些类,可以比较容易的做到线程同步。
等待函数

Win32 API提供了一组能使线程阻塞其自身执行的等待函数。这些函数只有在作为其参数的一个或多个同步对象产生信号时才会返回。在超过规定的等待时间后,不管有无信号,函数也都会返回。在等待函数未返回时,线程处于等待状态,此时线程只消耗很少的CPU时间。

使用等待函数即可以保证线程的同步,又可以提供程序的执行效率吧。其中最常用的等待函数有WaitForSingleObject和WaitForMultipleObject,他们分别用于检测单个同步对象和多个检测同步对象。

1.WaitForSingleObject

函数的原型如下:

DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMillisenonds);

参数hHandle是同步对象的句柄。参数dwMilliseconds是以毫秒为单位诶的超时间隔,如果该参数为0,那么函数就测试同步对象的状态并立即返回,如果该参数为INFINITE,则超时间隔是无限的。

2.WaitForMultipleObject

原型如下:

DWORD WaitForMultipleObject(DWORD nCount,CONST HANDLE *lpHandles,BOOL bWaitAll,DWORD dwMilliseconds);

参数lpHandles代表一个句柄数组,而参数cCount是句柄数组中的数目。参数bWaitAll说明了等待类型,如果是TRUE,那么函数在所有对象有信号后才返回;如果是FALSE,则只要有一个对象变成有信号的函数就返回。参数deMilliseconds是以毫秒为单位的超时间隔,如果参数为0那么函数就测试同步对象的状态并立即返回;如果该参数为INFINITE,则超时间隔是无限的。


CEvent类实现线程同步

事件对象(CEvent)是最简单的同步对象,它包括有信号的无信号的两种状态。在线程访问某一资源之前,也许需要等待某一事件的发生,这时用事件对象最合适。例如,只有在通信端口缓冲区收到数据后,监视线程才被激活。

在MFC中,Cevent类提供了对事件的支持。CEvent对象有两种类型:人工事件和自动事件。对于自动时间,当其获得信号后,就会释放下一个可用的线程。一个自动的事件对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值