让HGE支持网络(1) - HGE网络基础

本文介绍了如何为HGE添加网络支持的初步编码工作,包括在hge.h中添加必要的预处理器指令以支持Winsock2,并提供了自定义的min/max宏避免重定义问题。此外,还展示了用于多线程网络操作的临界区和自动锁定类实现。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值