现在位置: 首页 > 多线程编程
2013-07-27 23:52 工业·编程 ⁄ 共 2794字 暂无评论
一、具体实现: _AFXMT_INLINE CCriticalSection::CCriticalSection() _AFXMT_INLINE CCriticalSection::operator CRITICAL_SECTION*() _AFXMT_INLINE CCriticalSection::~CCriticalSection() _AFXMT_INLINE BOOL CCriticalSection::Lock() _AFXMT_INLINE BOOL CCriticalSection::Lock(DWORD ) _AFXMT_INLINE BOOL CCriticalSection::Unlock() 二、与互斥量比较 1、和CMutex类相似,也分两种情况:单独使用,和CSingleLock使用...
阅读全文
2013-07-27 23:51 工业·编程 ⁄ 共 1597字 暂无评论
一、有关函数: InitializeCriticalSection()  创建一个临界段 DeleteCriticalSection()  释放一个临界段 EnterCriticalSection()  获取对临界段的所有权,独占共享资源 TryEnterCriticalSection()  试图获得对临界段的所有权,但不阻塞 LeaveCriticalSection()  释放对资源的所有权 二、举例 1, #include<windows.h> #include<process.h> #include<stdio.h> CRITICAL_SEC...
阅读全文
2013-07-27 23:50 工业·编程 ⁄ 共 2395字 暂无评论
一、关于CMutex类 1、CMutex只是对 win32API 的互斥操作进行了封装 2、它的参数与 win32 API 中的 CreatMutex() 相对应 3、CMutex的构造函数调用 CreatMutex() 创建并检查 4、其Lock操作从基类继承,调用WaitForSingleObject()获得所有权,互斥类重载 Unlock 调用ReleaseMutex()释放所有权。 所以,MFC其实就是简单了封装了 win32 API 函数。 二、CMutex的实现: 1、CMutex::CMutex(BOOL bInitiallyOwn, LPCTSTR pstrMame) 2、C...
阅读全文
在多线程的情况下,如果存在多个线程要使用同一个资源的情况时,则需要在线程之间进行协调(同步)才能使程序完成预定的工作,而不会出现灾难性的冲突。 MFC 提供的多线程类分为两类:同步对象(CSyncObject 、CSemaphore 、CMutex 、CCriticalSection 和 CEvent )和同步访问对象(CMultiLock 和 CSingleLock )。 当必须控制对资源的访问以确保资源的完整性时,使用同步类。同步访问类用于获取对这些资源的访问权。本主题介绍...
阅读全文
互斥体是CMutex类的对象,也只允许一个线程占有某个共享资源,以保护独占式共享资源。因此,互斥体的使用方法与临界段的使用方法极为相似,所不同的是临界段只能在同一个进程中对线程进行同步,而互斥体可以用在不同的进程中进行线程同步控制。 CMutex类的构造函数原型为: CMutex(      BOOL bInitiallyOwn /* = FALSE */,    //用来指定互斥体对象初始状态是锁定(TRUE)还是非锁定(FALSE)&...
阅读全文
信号量是CSemaphore的对象,该对象的作用是对访问某个共享资源的线程的数目进行控制。 CSemaphore类的构造函数原型如下: CSemaphore(      LONG lInitialCount /* = 1 */,    //计数器的初始值      LONG lMaxCount /* = 1 */,        //计数器的最大计数值      LPCTSTR pstrName/* =NULL */,  &#...
阅读全文
类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻只允许一个线程存取资源或代码区。临界区在控制一次只有一个线程修改数据或其它的控制资源时非常有用。例如,在链表中增加一个结点就只允许一次一个线程进行。通过使用CCriticalSection对象来控制链表,就可以达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了运行线程的权力,而把其他线程统统阻塞。 CCriticalSection类的构造函数原...
阅读全文
2013-07-27 23:13 工业·编程 ⁄ 共 3218字 暂无评论
    CEvent类的一个对象,表示一个“事件”——一个允许一个事件发生时线程通知另一个线程的同步对象。在一个线程需要了解何时执行任务时,事件是十分有用的。例如,拷贝数据到数据文档时,线程应被通知何时数据是可用的。当新数据可用时,通过运用CEvent对象来通知拷贝线程,线程才可能尽快地执行。例如在某些网络应用程序中,一个线程(记为A)负责监听通信端口,另一个线程(记为B)负责更新用户数据。通过使用CE...
阅读全文
2013-07-23 09:29 工业·编程 ⁄ 共 229字 暂无评论
工作线程中afxMessageBox被主窗口覆盖,显示在最顶层的解决方法参考: AttachThreadInput(::GetWindowThreadProcessId(::GetForegroundWindow(),NULL), ::GetCurrentThreadId(), TRUE); 具体参考AttachThreadInput的使用。 绑定之后还要解除,TRUE改为FALSE。 这样做是因为禁止设置Modal,如果允许设置,还是用systemmodal方便。
阅读全文
2013-07-15 06:47 工业·编程 ⁄ 共 2571字 暂无评论
CEvent是用于线程间通信的一个封装类,他继承于CSyncObject,而CSyncObject又继承与类之父Cobject CEvent是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象 使用 CEvent 类2007-07-10 19:44使用 CEvent 类 CEvent 类提供了对事件的支持。事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象。例如在某些网络应用程序中,一个线程(记为A)负责监听通讯端口,另外一个线程(记为B)负责更新用...
阅读全文