写了一天代码
周一周二注定成了自己最忙碌的两天,例会在周三开,也造就了周三之后的放松。
写了一天代码,再回头看看,其中某个文件竟超过2k行了,还有很多功能没实现,明天写完估计能突破3k大关,
先把功能实现出来吧,等实现后再把各个部分抽象出来。现在写代码越来越不上路子了。BS一下自己。暂把今天用到的先做个备忘:
1、vector保存的是NetPacket对象,如何按照NetPacket中(uiDstIP和usDstPort)进行遍历并删除相同元素,如下所示:
struct NetPacket
{
/*...*/
UINT uiSrcIP;
UINT uiDstIP
USHORT usSrcPort;
USHORT usDstPort;
/*...*/
}
我的方法:
写两个比较函数morethan和equal,其中morethan传递给sort, equal传递给unique
遍历形式如下:
std:sort(Ovec.begin(),Ovec.end(),morethan);
删除形式如下:
Ovec.erase(std::unique(Ovec.begin(),Ovec.end(),equal),Ovec.end());
注意这里unique的用法。
还有几种方法:1、重载 NetPacket的<=,== ,2、重载(),但需将其定义载比较函数内。
2、多线程--同步(Mutex互斥量)
//创建互斥量
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全性
BOOL bInitialOwner, true:创建线程拥有互斥量,false: 相反
LPCTSTR lpName ); 线程名字,如果为NULL表示匿名,否则为命名
//得到互斥量(也包括其它线程同步内核对象)
DWORD WaitForSingleObject(
HANDLE hHandle, //同步对象
DWORD dwMilliseconds ); //等待时间, 如果为INFINITE表示一直挂起等待
//释放互斥量
BOOL ReleaseMutex(
HANDLE hMutex );
3、非阻塞I/O,select模型
发送数据前需设置ioctlsocket
接受数据时用select,用以下三个函数进行设置
FD_ZERO( *set ) 把set队列初始化成空队列
FD_SET( s,*set )把句柄s添加到队列set中
FD_ISSET( s, *set) 检查句柄s是否存在与队列set中
* FD_CLR( s,*set) 从队列set删除句柄s 没用到

没有评论:
发表评论