FSBII(八)class KMutex

转载 2012年03月26日 09:36:41
//---------------------------------------------------------------------------
// Sword3 Engine (c) 1999-2000 by Kingsoft
//
// File:	KMutex.h
// Date:	2000.08.08
// Code:	WangWei(Daphnis)
// Desc:	Header File
//---------------------------------------------------------------------------
#ifndef KMutex_H
#define KMutex_H
//---------------------------------------------------------------------------
#define SINGLE_PROCESS
//---------------------------------------------------------------------------
#ifdef WIN32
class ENGINE_API KMutex
#else
class KMutex
#endif
{
private:
#ifdef WIN32
#ifdef SINGLE_PROCESS
	CRITICAL_SECTION m_CriticalSection;//用于单进程的线程同步
#else
	HANDLE m_hMutex;//用于多进程的线程同步
#endif
#else
    pthread_mutex_t mutex;
#endif
public:
    KMutex();
    ~KMutex();
    void Lock(void);
    void Unlock(void);
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
// Sword3 Engine (c) 1999-2000 by Kingsoft
//
// File:	KMutex.cpp
// Date:	2000.08.08
// Code:	WangWei(Daphnis)
// Desc:	Implements a simple mutex object for thread synchronization
//---------------------------------------------------------------------------
#include "KWin32.h"
#include "KDebug.h"
#include "KMutex.h"

KMutex::KMutex()
{
#ifdef WIN32
#ifdef SINGLE_PROCESS
	InitializeCriticalSection(&m_CriticalSection);
#else
	m_hMutex = CreateMutex(NULL, FALSE, NULL);
	if (!m_hMutex)
		g_MessageBox("KMutex::KMutex() CreateMutex() failed!");
#endif
#else
     int rc = pthread_mutex_init(&mutex, NULL);
#endif
}
//---------------------------------------------------------------------------
// 函数:	~KMutex
// 功能:	析购函数
// 参数:	void
// 返回:	void
//---------------------------------------------------------------------------
KMutex::~KMutex()
{
#ifdef WIN32
#ifdef SINGLE_PROCESS
	DeleteCriticalSection(&m_CriticalSection);
#else
	CloseHandle(m_hMutex);
#endif
#else
     int rc = pthread_mutex_destroy(&mutex);
#endif
}
//---------------------------------------------------------------------------
// 函数:	Lock
// 功能:	锁定
// 参数:	void
// 返回:	void
//---------------------------------------------------------------------------
void KMutex::Lock(void)
{
#ifdef WIN32
#ifdef SINGLE_PROCESS
	EnterCriticalSection(&m_CriticalSection);
#else
	WaitForSingleObject(m_hMutex, INFINITE);
#endif
#else
     int rc = pthread_mutex_lock(&mutex);
#endif
}
//---------------------------------------------------------------------------
// 函数:	Unlock
// 功能:	解开
// 参数:	void
// 返回:	void
//---------------------------------------------------------------------------
void KMutex::Unlock(void)
{
#ifdef WIN32
#ifdef SINGLE_PROCESS
	LeaveCriticalSection(&m_CriticalSection);
#else
	ReleaseMutex(m_hMutex);
#endif
#else
     int rc = pthread_mutex_unlock(&mutex);
#endif
}


八字易经算法之用JAVA实现生旺死绝和十神

序:一直上网发现有人出软妹币求八字易经排盘系统方法或者源代码,更有此类软件竟要收费上百元。   比如:http://bbs.csdn.net/topics/220008904   我上网查找半天也...
  • luozhuang
  • luozhuang
  • 2013年03月13日 13:52
  • 5444

Python 3语法小记(八)类class

Python 3 中只有新式类,没有旧式类,不需要显示的指定,你定义的类都是新式类 如果你不知道新式类和旧式类的区别,那么,也不用知道了 定义: >>> class Nothing: #定义方法...
  • jcjc918
  • jcjc918
  • 2013年08月01日 23:08
  • 18254

JVM进阶(十八)——初识Class文件

JVM进阶(十八)——初识Class文件  关于类加载机制的相关知识在前面的博文中暂时先讲那么多。中间留下了很多问题,从本篇博文开始,我们来一一解决。   从我们最陌生而又最熟悉的.class文件开...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2017年03月13日 15:54
  • 42746

FSBII(一)class CHyperlinkStatic : public CStatic

#if !defined(AFX_HYPERLINKSTATIC_H__32A71426_1315_407C_9D90_A484C5589D80__INCLUDED_) #define AFX_HYP...
  • yynetsdk
  • yynetsdk
  • 2012年03月26日 09:08
  • 675

FSBII(三)class CPictureEx : public CStatic

////////////////////////////////////////////////////////////////////// // PictureEx.cpp: implementat...
  • yynetsdk
  • yynetsdk
  • 2012年03月26日 09:15
  • 578

FSBII(五)IOCP

/******************************************************************** created: 2003/02/14 file bas...
  • yynetsdk
  • yynetsdk
  • 2012年03月26日 09:25
  • 562

FSBII(六)IOCPServer

/******************************************************************** created: 2003/02/14 file bas...
  • yynetsdk
  • yynetsdk
  • 2012年03月26日 09:31
  • 682

深入理解Java Class文件格式(八)

在本专栏的第一篇文章 深入理解Java虚拟机到底是什么 中, 我们主要讲解了什么是虚拟机, 这篇博客是对JVM的一个概述。 在随后的几篇文章中,一直在讲解class文件格式。 在今天这篇博客中, ...
  • brave2211
  • brave2211
  • 2014年03月27日 00:02
  • 4303

深入理解Java Class文件格式(八)

在本专栏的第一篇文章 深入理解Java虚拟机到底是什么 中, 我们主要讲解了什么是虚拟机, 这篇博客是对JVM的一个概述。 在随后的几篇文章中,一直在讲解class文件格式。 在今天这篇博客中, ...
  • liuyinghui523
  • liuyinghui523
  • 2014年06月05日 11:05
  • 513

Inside Qt Series (八):Meta Object Class overview

前面我们介绍了 Meta Object 的基本功能,和它支持的最重要的特性之一:Signal & Slot的基本功能。现在让我们来进入 Meta Object 的内部,看看它是如何支持这些能力的。 ...
  • ruglcc
  • ruglcc
  • 2012年09月10日 14:34
  • 566
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FSBII(八)class KMutex
举报原因:
原因补充:

(最多只允许输入30个字)