VC++多线程中用到的同步对象

#include <afxmt.h>

下面是afxmt.h里的类声明:

 class CSyncObject;
  class CSemaphore;
  class CMutex;
  class CEvent;
  class CCriticalSection;

class CSingleLock;
class CMultiLock;

//下面把单词解释一下:

sync:同步

object:对象

Semaphore:信号

Mutex:互斥

Event:事件

Critical:临界

Section:单元,区

Single:单一的

Lock:锁

Multi:Multimedia的缩写:多

//下面看一下各类的派生关系

=========================

class CSyncObject : public CObject

class CSemaphore : public CSyncObject

class CMutex : public CSyncObject

class CEvent : public CSyncObject

class CCriticalSection : public CSyncObject

class CSingleLock

class CMultiLock

//接下来分析一下几个类的实现

第一个:

class CSyncObject : public CObject
{
 DECLARE_DYNAMIC(CSyncObject)

// Constructor
public:
 CSyncObject(LPCTSTR pstrName);

// Attributes
public:
 operator HANDLE() const;
 HANDLE  m_hObject;

// Operations
 virtual BOOL Lock(DWORD dwTimeout = INFINITE);
 virtual BOOL Unlock() = 0;
 virtual BOOL Unlock(LONG /* lCount */, LPLONG /* lpPrevCount=NULL */)
  { return TRUE; }

// Implementation
public:
 virtual ~CSyncObject();
#ifdef _DEBUG
 CString m_strName;
 virtual void AssertValid() const;
 virtual void Dump(CDumpContext& dc) const;
#endif
 friend class CSingleLock;
 friend class CMultiLock;
};

从以上代码,可以看到,

class CSyncObject : public CObject ,CSyncObject是从CObject类派生来的,这个类叫同步对象类,和其它的类一样,内部无非就是一些构造函数,析构函数,数据成员,函数成员,它的每一个数据成员的定义,都是因为某种需求而定义,函数成员,也一定是为了提供某种功能而提供,我们继续看它的这些内容:

virtual BOOL Lock(DWORD dwTimeout = INFINITE);

//这个虚函数,返回值为BOOL,函数名为Lock,参数为DWORD类型,从参数对象的意思可以看出,它是一个超时值
 virtual BOOL Unlock() = 0;

//这个虚函数,返回值为BOOL,函数名为Unlock,无参数,解锁的意思
 virtual BOOL Unlock(LONG /* lCount */, LPLONG /* lpPrevCount=NULL */)

//这个虚函数,返回值为BOOL,函数名为Unlock,和上面那个同名的,算是函数的重载吧(提醒自己一下有这个重载的名字,呵呵),参数为LONG和LPLONG,这两个不太明白

 virtual ~CSyncObject();

//这个是析构函数:析构函数同类名,前面加那个波浪线,呵呵,不需要参数;

friend class CSingleLock;
 friend class CMultiLock;

这两个是友元类的声明,那自然代表了关系不一般了,友元类可以方便的操作一般类没有权限访问的函数和数据成员

 

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC提供了一组同步同步访问类来解决线程同步问题。其同步对象包括:CSyncObject、CSemaphore、CMutex,CCriticalSection和CEvent; 同步访问对象包括:CMultiLock和CSingleLock。同步类用于访问资源时保证资源的整体性。其CSyncObject是其他四个同步类的基类,不直接使用。信号同步类CSemaphore通常用于当一个应用程序同时有多个线程访问一个资源的情况(例如,应用程序允许对同一个Document有多个View);事件同步类CEvent通常用于在应用程序访问资源之前应用程序必须等待的情况(比如,在数据写进一个文件之前数据必须从通信端口得到);互斥同步类CMutex和临界区同步类CCriticalSection都是用于保证一个资源一次只能有一个线程访问,二者的不同之处在于前者允许有多个应用程序使用该资源,例如,该资源在一个DLL当,而后者则不允许对同一个资源的访问超出进程的范畴,而且使用临界区的方式效率比较高。同步访问类用于获得对这些控制资源的访问。CMultiLock和CSingleLock的区别仅在于是需要控制访问多个还是单个资源对象。 信号量对象的构造函数: CSemaphore( LONG lInitialCount = 1, LONG lMaxCount = 1, LPCTSTR pstrName = NULL, LPSECURITY_ATTRIBUTES lpsaAttributes = NULL ); 单锁的构造函数: explicit CSingleLock( CSyncObject* pObject, BOOL bInitialLock = FALSE ); 多锁的构造函数: CMultiLock( CSyncObject* ppObjects[ ], DWORD dwCount, BOOL bInitialLock = FALSE );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值