現在開始寫讓HGE支持網絡的代碼了。。。
由於目前這部分代碼本週剛開始寫。。就是天今天。。
不過想編譯網絡的話。你還得在 hge.h 文件中添了一行代碼,
1:並且要添加在 #include <windows.h> 前面
因爲我們的網絡接口將會引用到文件 winsock2.h.這是必須的。。
2:至於很多代碼都將min和max給反定義了。我不認爲是好的東西。我們可以自己寫一個:
#define t_max(x,y) ((x) > (y)) ? (x) : (y)
而不需要將#unidef掉。
3:我們將會使網絡部分以多線程的方式運行。
所以以下代碼將會用到.lock.h:
#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...寫好以後將會公佈。