[MFC]MFC同步类总结
来源:互联网 发布:法国女人知乎 编辑:程序博客网 时间:2024/05/23 12:05
转自:http://blog.csdn.net/shimazhuge/article/details/8907347
MFC同步类
- CCriticalSection临界区:在用户模式工作(遇到加锁等待时会进入内核模式),使用与保护线程间共享资源,一个线程可以多次Lock不会错。不支持在多进程之间工作。将一段代码置入临界区,只允许最多一个线程进入执行这段代码。一个临界区仅在创建它的进程中有效。
- CMutex互斥量:在内核模式工作,除支持临界区的功能外,还可以为互斥量命名,以便在多进程中工作。互斥量比临界区耗资源。一个时刻至多只允许一个线程访问某资源,未被占用时处于有信号状态,可以实现对共享资源的互斥访问。
- CEvent事件:在内核模式工作,适用于某一线程等待某事件发生才执行的场合。
- CSemaphore信号量(信号灯):在内核模式工作,适用于允许特定个数的线程执行某任务。允许一定数目的线程访问某个共享资源,常用来控制访问共享资源的线程数量。
同步对象的适用场合
- 1.如果某个线程必须等待某些事件发生后才能存取相应的资源,则用CEvent
- 2.如果一个应用程序同时可以有多个线程存取相应资源,则用CSemaphore
- 3.如果多个应用程序(多个线程)同时存取相应资源,则用CMutex,否则用CCriticalSection
等待类CSingleLock
一个CSingleLock类对象代表一种访问控制机制,这种机制用于控制在一个多线程程序中对一个资源的访问。为了使用同步类CSemaphore、CMutex、CCriticalSection、CEvent所创建的同步对象,你必须创建一个CSingleLock或者CMultiLock对象来等待和释放这个同步对象。当你只需要每次等待一个对象时,则用CsingleLock,否则用CMultiLock。
要使用一个CSingleLock对象,在被控制资源的类中的一个成员函数内部调用CSingleLock的构造函数。然后调用IsLock成员函数来确定这个资源是否可用。如果资源是可用的,则继续该成员函数的其余部分。
- CSingleLock::CSingleLock( CSyncObject* pObject, BOOL bInitialLock = FALSE );
- pObject 指向要被访问的同步对象。不能是NULL
- bInitialLock 指示是否要在最初尝试访问所提供的对象
- BOOL CSingleLock::IsLocked()
- 返回值:如果对象被加锁则返回非零值;否则返回0。 此成员函数用来确定与CSingleLock对象相关的对象是否没有发信号(不能使用)。
- BOOL CSingleLock::Lock( DWORD dwTimeOut = INFINITE );
- 返回值:如果函数成功则返回非零值;否则返回0。
- 参数:dwTimeOut 指定等待要被利用的同步对象的时间数量。如果是INFINITE,则Lock等待直到该对象在返回之前可用。
- 说明:此成员函数用来获取对由同步对象控制的资源的访问,这个访问要提供给CSingleLock构造函数。如果同步对象是可用的,Lock将成功返回,而且线程拥有了该对象。如果此同步对象是不可用的,则Lock将等待此同步对象在dwTimeOut参数指定的时间内变为可用。如果此同步对象在指定的时间内没有变为可用的,则Lock返回失败。
- BOOL CSingleLock::Unlock( );
- BOOL CSingleLock::Unlock( LONG lCount, LPLONG lPrevCount = NULL );
- 返回值:如果函数成功则返回非零值;否则返回0。
- 参数: lCount:要释放的访问数目。必须要大于0。如果指定的数量要导致对象的计数超过它的最大值,则计数不改变,并且函数返回FALSE。
- lPrevCount:指向一个用来接收同步对象的先前计数的变量。如果是NULL,则不返回先前的计数。
- 说明:此成员函数用来释放由CSingleLock拥有的同步对象。由CSingleLock的析构函数类调用这个函数。如果你需要释放一个信号的多于一个的访问计数,可以使用Unlock的第二种形式,并指定要释放的访问数目。
在MFC中,具有等待功能的类CSingleLock和CMultiLock封装了Win32中的等待函数WaitForSingleObject()和WaitForMultipleObjects() 。
0 0
- [MFC]MFC同步类总结
- [MFC]MFC同步类总结
- MFC同步类
- MFC总结
- MFC 总结
- MFC总结
- MFC总结
- MFC多线程同步方法
- MFC多线程同步方法
- MFC多线程同步问题
- MFC线程同步
- MFC进度条同步问题
- MFC 中英文同步
- MFC中线程同步
- MFC多线程同步方法
- MFC 线程同步问题
- MFC中的线程同步
- MFC多线程同步方法
- 一个奇怪的SQL问题:case when 在记录不存在时不生效
- lsdk无线驱动与管理层的接口
- python学习笔记-痛点归纳
- TOJ 1923.Tanning Salon
- 网易笔试编程题:两种排序方法(C++)
- [MFC]MFC同步类总结
- APK安装过程分析
- mysql 安装
- EditText默认无法获取焦点,必须点击一次才能获取焦点打开软键盘的解决办法
- Fluent NHibernate联合主键的使用
- java常用命令
- method swizzling
- 盘点2016年iOS开发面试题及答案整理
- React Native开发AndroidApp(1)