让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)

而不需要将#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...写好以后将会公布

原创粉丝点击