现在开始写让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...写好以后将会公布