2010/7/26 临界量封装

封装类的头文件:

// CriticalSection.h: interface for the CCriticalSection class.

//

//

#if !defined(AFX_CRITICALSECTION_H__2C56C0EA_7294_4BB9_A4E7_38D28DA96925__INCLUDED_)

#define AFX_CRITICALSECTION_H__2C56C0EA_7294_4BB9_A4E7_38D28DA96925__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include <windows.h>

class CCriticalSection 

{

public:

 void UnLock(void);

 void Lock(void);

 CCriticalSection();

 virtual ~CCriticalSection();

 

 CRITICAL_SECTION cs;

};

#endif // !defined(AFX_CRITICALSECTION_H__2C56C0EA_7294_4BB9_A4E7_38D28DA96925__INCLUDED_)

封装类的实现文件:

 

// CriticalSection.cpp: implementation of the CCriticalSection class.

//

//

#include "CriticalSection.h"

//

// Construction/Destruction

//

CCriticalSection::CCriticalSection()

{

InitializeCriticalSection(&cs);

}

CCriticalSection::~CCriticalSection()

{

DeleteCriticalSection(&cs);

}

void CCriticalSection::Lock()

{

EnterCriticalSection(&cs);

}

void CCriticalSection::UnLock()

{

LeaveCriticalSection(&cs);

}

封装类使用的例子代码:

 

#include <windows.h>

#include <iostream.h>

#include "CriticalSection.h"

DWORD WINAPI fun1Proc(LPVOID lpParamter);

DWORD WINAPI fun2Proc(LPVOID lpParamter);

int g_tickets = 100;

CRITICAL_SECTION g_cs;//全局的原因是多个线程都在使用

CCriticalSection *g_ccs;

void main()

{

 HANDLE hThread1 = CreateThread(NULL,0,fun1Proc,NULL,0,NULL);

 HANDLE hThread2 = CreateThread(NULL,0,fun2Proc,NULL,0,NULL);

 CloseHandle(hThread1);

 CloseHandle(hThread2);

 //InitializeCriticalSection(&g_cs);

    g_ccs = new CCriticalSection();

 Sleep(1000 * 4);

 //DeleteCriticalSection(&g_cs);

 delete g_ccs;

}

DWORD WINAPI fun1Proc(LPVOID lpParamter)

{

while (TRUE)

{

 //EnterCriticalSection(&g_cs);

 g_ccs->Lock();

 if (g_tickets >0)

 {

  cout<<"the Thread1 sall tickets is "<<g_tickets--<<endl;

 }

 else

 {

  break;

 }

 g_ccs->UnLock();

 //LeaveCriticalSection(&g_cs);

}

return 0;

}

DWORD WINAPI fun2Proc(LPVOID lpParamter)

{

while (TRUE)

{

// EnterCriticalSection(&g_cs);

 g_ccs->Lock();

 if (g_tickets > 0)

 {

  cout<<"The Thread2 sall tickets is "<<g_tickets--<<endl;

 }

 else

 {

  break;

 }

// LeaveCriticalSection(&g_cs);

 g_ccs->UnLock();

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值