ON_EN_CHANGE(IDC_CONTENT, &CClientDlg::OnEnChangeContent)
1.数据的解析属于业务层的逻辑,不要放到网络层来
2.CRITICAL_SECTION / MUTEXT 封装时注意把拷贝构造函数和复制构造函数私有化
private:
CCriSec(const CCriSec& cs);
CCriSec operator = (const CCriSec& cs);
3.将各种同步对象封装并留出相同的接口,这种方式以前没用过
template<class CLockObj> class CLocalLock
{
public:
CLocalLock(CLockObj& obj) : m_lock(obj) {m_lock.Lock();}
~CLocalLock() {m_lock.Unlock();}
private:
CLockObj& m_lock;
};
typedef CLocalLock<CCriSec> CCriSecLock;
typedef CLocalLock<CCriSec2> CCriSecLock2;
typedef CLocalLock<CMTX> CMutexLock;
以此来实现同步成员变量的局部适配
CCriSecLock locallock(m_scBuffer);
4. 这种格式看着挺规范的
LPFN_ACCEPTEX Get_AcceptEx_FuncPtr (SOCKET sock);
5.客户端SOCKET,初始状态设为STOPPED,创建中STARTING,创建后STARTED
在处理线程里面
while( state == STARTED)
{
}
6.通过接口向外传递数据时,SOCKET以一个DWORD为标记传出去,不要直接传SOCKET