让HGE支持网络(1) - HGE网络基础
来源:互联网 发布:裁剪软件 编辑:程序博客网 时间:2024/05/17 08:49
现在开始写让HGE支持网络的代码了。。。
由于目前这部分代码本周刚开始写。。就是天今天。。
不过想编译网络的话。你还得在 hge.h 文件中添了一行代码,
1:并且要添加在 #include <windows.h> 前面
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
因为我们的网络接口将会引用到文件 winsock2.h.这是必须的。。
2:至于很多代码都将min和max给反定义了。我不认为是好的东西。我们可以自己写一个:
#define t_min(x,y) ((x) < (y)) ? (x) : (y)
#define t_max(x,y) ((x) > (y)) ? (x) : (y)
#define t_max(x,y) ((x) > (y)) ? (x) : (y)
而不需要将#unidef掉。
3:我们将会使网络部分以多线程的方式运行。
所以以下代码将会用到.lock.h:
#pragma once
#include <assert.h>
//-----------------------------------------------------------------------------------------------
// tCriticalSection
//-----------------------------------------------------------------------------------------------
class tCriticalSection
{
public:
// 构造
tCriticalSection(){ InitializeCriticalSection(&m_CritSect); }
// 析构
~tCriticalSection(){ DeleteCriticalSection(&m_CritSect); }
public:
// 锁定临界锁
void Lock(){ EnterCriticalSection(&m_CritSect); }
// 解锁临界锁
void Unlock(){ LeaveCriticalSection(&m_CritSect); }
private:
CRITICAL_SECTION m_CritSect; // 临界锁对象
};
//-----------------------------------------------------------------------------------------------
// tAutoLock 类, 互斥类
//-----------------------------------------------------------------------------------------------
class tAutoLock
{
public:
tAutoLock(tCriticalSection* pLock)
{
assert(pLock != NULL);
m_pLock = pLock;
pLock->Lock();
m_LockNums = 1;
}
~tAutoLock()
{
assert(m_pLock != NULL);
while (m_LockNums > 0)
{
m_pLock->Unlock();
m_LockNums--;
}
}
void Lock()
{
assert(m_pLock != NULL);
m_pLock->Lock();
m_LockNums++;
}
void Unlock()
{
assert(m_pLock != NULL);
if (m_LockNums > 0)
{
m_pLock->Unlock();
m_LockNums--;
}
}
private:
tCriticalSection* m_pLock;
int m_LockNums;
};
#include <assert.h>
//-----------------------------------------------------------------------------------------------
// tCriticalSection
//-----------------------------------------------------------------------------------------------
class tCriticalSection
{
public:
// 构造
tCriticalSection(){ InitializeCriticalSection(&m_CritSect); }
// 析构
~tCriticalSection(){ DeleteCriticalSection(&m_CritSect); }
public:
// 锁定临界锁
void Lock(){ EnterCriticalSection(&m_CritSect); }
// 解锁临界锁
void Unlock(){ LeaveCriticalSection(&m_CritSect); }
private:
CRITICAL_SECTION m_CritSect; // 临界锁对象
};
//-----------------------------------------------------------------------------------------------
// tAutoLock 类, 互斥类
//-----------------------------------------------------------------------------------------------
class tAutoLock
{
public:
tAutoLock(tCriticalSection* pLock)
{
assert(pLock != NULL);
m_pLock = pLock;
pLock->Lock();
m_LockNums = 1;
}
~tAutoLock()
{
assert(m_pLock != NULL);
while (m_LockNums > 0)
{
m_pLock->Unlock();
m_LockNums--;
}
}
void Lock()
{
assert(m_pLock != NULL);
m_pLock->Lock();
m_LockNums++;
}
void Unlock()
{
assert(m_pLock != NULL);
if (m_LockNums > 0)
{
m_pLock->Unlock();
m_LockNums--;
}
}
private:
tCriticalSection* m_pLock;
int m_LockNums;
};
转载请注明出处:原作BLOG (ShowLong)
好了。其它的代码我正在写ing...写好以后将会公布
- 让HGE支持网络(1) - HGE网络基础
- 让HGE支持网络(1) - HGE网络基础
- 让HGE支持中文(1) - HGE中文显示
- 让HGE支持中文(1) - HGE中文显示
- 让HGE支持中文(2) - HGE中文输入
- 让HGE支持中文(3) - HGE字符串处理
- 让HGE支持中文(2) - HGE中文输入
- 让HGE支持中文(3) - HGE字符串处理
- 让HGE支持中文(4) - 编辑框的实现
- HGE基础教程(1)
- HGE指南1翻译
- HGE指南1翻译
- HGE 基础教程 1~5
- Hge系列教材1
- HGE 1.8.1a 支持UNICODE和游戏手柄Joystick
- HGE 丢失hge.dll
- hge源码注释 1 hge引擎的启动(1)
- HGE教程翻译(1)
- Codeforces Round #215 (Div. 2) D Sereja ans Anagrams
- 冲销凭证
- MyEclipse代码自动提示功能
- 获取屏幕宽高
- RAC linux运行环境安装前检查 服务器检查
- 让HGE支持网络(1) - HGE网络基础
- 深入浅出C++虚函数表
- 设计模式心得(五) 适配器模式
- oracle经典书籍推荐
- JAVA操作PDF文件
- Contiki Makefile 详细解读
- RAC linux配置服务器的图形化环境
- UVA 11881(Internal Rate of Return)二分法
- C++中的虚函数总结