📄 clientthread.cpp
字号:
// ClientThread.cpp : 实现文件
//
#include "stdafx.h"
#include "WspProcess.h"
#include "ClientThread.h"
// CClientThread
IMPLEMENT_DYNCREATE(CClientThread, CWinThread)
CClientThread::CClientThread()
{
m_pWnd = NULL;
m_pSocket = NULL;
m_pRecvQueue = NULL;
}
CClientThread::CClientThread(CPkgQueue *pRecvQueue, CPkgQueue *pSendQueue, CWnd *pWnd, const CString& sConnStr)
{
m_pRecvQueue = pRecvQueue;
m_pSendQueue = pSendQueue;
m_pWnd = pWnd;
m_strConn = sConnStr;
}
CClientThread::~CClientThread()
{
}
BOOL CClientThread::InitInstance()
{
// TODO: 在此执行任意逐线程初始化
if(m_pRecvQueue == NULL || m_pWnd == NULL)return FALSE;
m_pSocket = new CClientSocket(this); //产生一个CClientSocket实例
if(! m_pSocket->Open(m_strConn))
{
delete m_pSocket;
m_pSocket = NULL;
return FALSE;
}
return TRUE;
}
int CClientThread::ExitInstance()
{
// TODO: 在此执行任意逐线程清理
return CWinThread::ExitInstance();
}
/**
* 提供给CClientSocket类的回调函数,用于将与服务器的连接状况的变化反馈给本线程
**/
void CClientThread::ProcessSocket()
{
if(m_pSocket->IsClose())
{
::PostQuitMessage(0);
}
else
if(m_pSocket->IsReceive())
{
CPkg* pkg = new CPkg();
m_pSocket->ReceivePkg(pkg);
m_pRecvQueue->Add(pkg);
m_pWnd->PostMessage(WM_ONRECEIVE);
m_pSocket->SetReceive(false);
if(pkg->MsgFlag == ANSCLOSECOM)AfxEndThread(0);
}
}
BEGIN_MESSAGE_MAP(CClientThread, CWinThread)
ON_THREAD_MESSAGE(WM_ONSEND, OnSend)
END_MESSAGE_MAP()
// CClientThread 消息处理程序
void CClientThread::OnSend(WPARAM wParam, LPARAM lParam)
{
CPkg *pkg = m_pSendQueue->Remove();
m_pSocket->SendPkg(pkg);
delete pkg;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -