// 工作者线程,负责监视串行口
UINT CommProc(LPVOID pParam)
{
OVERLAPPED os;
DWORD dwMask, dwTrans;
COMSTAT ComStat;
DWORD dwErrorFlags; CTTYDoc *pDoc=(CTTYDoc*)pParam; memset(&os, 0, sizeof(OVERLAPPED));
os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);//无信号的 if(os.hEvent==NULL)
{
AfxMessageBox("Can't create event object!");
return (UINT)-1;
} while(pDoc->m_bConnected)
{
ClearCommError(pDoc->m_hCom,&dwErrorFlags,&ComStat); if(ComStat.cbInQue)
{
// 无限等待WM_COMMNOTIFY消息被处理完
WaitForSingleObject(pDoc->m_hPostMsgEvent, INFINITE);
ResetEvent(pDoc->m_hPostMsgEvent); // 通知视图
PostMessage(pDoc->m_hTermWnd, WM_COMMNOTIFY, EV_RXCHAR, 0); continue;
} dwMask=0; if(!WaitCommEvent(pDoc->m_hCom, &dwMask, &os)) // 重叠操作
{ if(GetLastError()==ERROR_IO_PENDING)
// 无限等待重叠操作结果
GetOverlappedResult(pDoc->m_hCom, &os, &dwTrans, TRUE);
else
{
CloseHandle(os.hEvent);
return (UINT)-1;
}
}
} CloseHandle(os.hEvent);
return 0;
} 此函数中的WaitCommEvent(pDoc->m_hCom, &dwMask, &os // 重叠操作,
等待发生的事件, 我怎么没有找到呢?还有OVERLAPPED结构中的最后一个参数,os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);//无信号的
这个事件是不是不需要我来控制呢?
当发生了一个EV_RXCHAR事件,我该怎么办呢?
我怎么知道这个事件发生了呢?WaitCommEvent这个函数好像没有告诉我啊!
现在是程序设计的攻关阶段,请高手帮忙解决呀
UINT CommProc(LPVOID pParam)
{
OVERLAPPED os;
DWORD dwMask, dwTrans;
COMSTAT ComStat;
DWORD dwErrorFlags; CTTYDoc *pDoc=(CTTYDoc*)pParam; memset(&os, 0, sizeof(OVERLAPPED));
os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);//无信号的 if(os.hEvent==NULL)
{
AfxMessageBox("Can't create event object!");
return (UINT)-1;
} while(pDoc->m_bConnected)
{
ClearCommError(pDoc->m_hCom,&dwErrorFlags,&ComStat); if(ComStat.cbInQue)
{
// 无限等待WM_COMMNOTIFY消息被处理完
WaitForSingleObject(pDoc->m_hPostMsgEvent, INFINITE);
ResetEvent(pDoc->m_hPostMsgEvent); // 通知视图
PostMessage(pDoc->m_hTermWnd, WM_COMMNOTIFY, EV_RXCHAR, 0); continue;
} dwMask=0; if(!WaitCommEvent(pDoc->m_hCom, &dwMask, &os)) // 重叠操作
{ if(GetLastError()==ERROR_IO_PENDING)
// 无限等待重叠操作结果
GetOverlappedResult(pDoc->m_hCom, &os, &dwTrans, TRUE);
else
{
CloseHandle(os.hEvent);
return (UINT)-1;
}
}
} CloseHandle(os.hEvent);
return 0;
} 此函数中的WaitCommEvent(pDoc->m_hCom, &dwMask, &os // 重叠操作,
等待发生的事件, 我怎么没有找到呢?还有OVERLAPPED结构中的最后一个参数,os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);//无信号的
这个事件是不是不需要我来控制呢?
当发生了一个EV_RXCHAR事件,我该怎么办呢?
我怎么知道这个事件发生了呢?WaitCommEvent这个函数好像没有告诉我啊!
现在是程序设计的攻关阶段,请高手帮忙解决呀
解决方案 »
- 如何判断程序主窗口已经失去焦点了
- vc中如何使用exp/imp命令全备份/恢复oracle数据库?
- 怎么获取windows有几张物理网卡呢?
- 画线时改变不了颜色,请教高手
- 网络游戏计费
- 菜鸟急求关于OpenClient开发的资料?
- 如何在VC++的IDE环境中,在工程中的FileView中,如何直接编辑ResourcesFiles中的*.rc文件的源程序。
- (100分)COM+中基本概念大讨论,(来者有分!)
- 哪位高手试过向office2000的打开/关闭文件对话框的文件名输入框中发送d:\字符,然后回车的消息?
- 为何增加一个成员变量就非法操作????
- 我进入IT业1年,我所在的公司只有一个美工和我两个技术人员,虽然什么项目都要我做,但是感觉是在自学,目光短浅,请问我是继续在这个公
- 对话框里的按钮如何响应子对话框?
如:SetCommEvent(pDoc->m_hComm, EV_RXCHAR);//设置等待收到字符的事件
os.hEvent= CreateEvent(NULL, TRUE, FALSE, NULL);//创建手工重置的无信号事件
WaitCommEvent(pDoc->m_hComm, &dwMask, &os);
当程序运行到WaitCommEvent,它会马上返回(overlapped),然后到发生了EV_RXCHAR时,会
将刚才的Event对象设置为有信号。
你可以使用WaitForSingleObject等待这个Event,当它返回WAIT_OBJECT_0(成功返回)
时开始接收数据。接收完数据后如须再次等待EV_RXCHAR事件,必须调用ResetEvent将Event设
为无信号。