讓HGE支持網絡(1) - HGE網絡基礎

現在開始寫讓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)

而不需要將#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;
};

轉載請註明出處:原作BLOG (ShowLong)

好了。其它的代碼我正在寫ing...寫好以後將會公佈。

發佈了67 篇原創文章 · 獲贊 6 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章