// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
if(Ir_Connected)//如果连接已经存在
{
Ir_Establish.EnableWindow(FALSE); //关闭连接建立按钮
Ir_Halt.EnableWindow(TRUE); //开启连接取消按钮
Ir_Send.EnableWindow(TRUE); //开启发送功能按钮
}
else//连接未存在
{
Ir_Establish.EnableWindow(TRUE); //开启连接建立按钮
Ir_Halt.EnableWindow(FALSE); //关闭连接取消按钮
Ir_Send.EnableWindow(FALSE); //关闭发送按钮
}
Ir_CtlEvent = CreateEvent(NULL,FALSE,FALSE,_T("IsConnected"));
if(Ir_CtlEvent == NULL)
{
MessageBox(_T("Error created event"));
DestroyWindow();
}
//建立接收线程
Ir_Thread = TRUE; //保证线程能够正常启动
Ir_pReciveThread = AfxBeginThread(RevThreadProc,(void*)this,THREAD_PRIORITY_NORMAL);
if(!Ir_pReciveThread)
{
MessageBox(_T("Error created thread for receiving"));
DestroyWindow();
}
this->UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
。
。
。
。
。
。
/*****************************************************************
* 函数名 : RevThreadProc
* 功能 : 接收线程,在连接状态下负责接收外部传送的信息,该
* 函数是类外部的函数注意其与类对象之间的交互
* 返回值 :
******************************************************************/
UINT RevThreadProc(LPVOID pParam)
{
CIrServerDlg* pOperateDlg = (CIrServerDlg*)pParam;//取得操作对象
int iReturn;
DWORD BufferSize;
TCHAR Rev[300]; //最多一次接收300个字符,包括空字符
memset(Rev,0,600); //清空接收缓存
BufferSize = sizeof(TCHAR)*300;
//接收处理池
while(pOperateDlg->Ir_Thread) //
{
WaitForSingleObject(pOperateDlg->Ir_CtlEvent,INFINITE);
while(pOperateDlg->Ir_Connected)//如果连接存在,保持接收线程的处理
{
iReturn = recv(pOperateDlg->Ir_ClientConnectSocket,(char*)Rev,BufferSize, 0);
// Check if there is any data received. If there is, display it.
if (iReturn == SOCKET_ERROR)
{
pOperateDlg->Ir_CtlString.Format(_T("Data recieving errors,maybe need restart connection: \
\r\nReceive Socket errors %d"),WSAGetLastError());
::MessageBox(pOperateDlg->m_hWnd,pOperateDlg->Ir_CtlString.LockBuffer()
,NULL,MB_OK);
pOperateDlg->Ir_CtlString.UnlockBuffer();
pOperateDlg->HaltConnect();
}
else if (iReturn == 0)
{
pOperateDlg->Ir_CtlString.Format(_T("Receive Socket finished\n"),WSAGetLastError());
::MessageBox(pOperateDlg->m_hWnd,pOperateDlg->Ir_CtlString.LockBuffer()
,NULL,MB_OK);
pOperateDlg->Ir_CtlString.UnlockBuffer();
}
else
{
//将得到的字符信息存入输入显示缓冲
pOperateDlg->Ir_RevString.Insert((pOperateDlg->Ir_RevString.GetLength()),Rev);
memset(Rev,0,600); //清空接收缓存
pOperateDlg->UpdateData(FALSE);//显示收集到的数据
}
}
}
return 0xdead;
}