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