串口事件的捕捉问题
本人在写一个串口通信程序,对串口事件的捕捉问题不太明白,现有几个问题要请教大家:
上网查过的资料几乎都一个版本的:
就是————捉串口事项。mscomm控件可以采用轮询或事件驱动的方法从端口获取数据。我们介绍比较使用的事件驱动方法:有事件(如接收到数据)时通知程序。在程序中需要捕获并处理这些通讯事件。
在mainfrm.h中:
protected:
afx_msg void oncommmscomm();
declare_eventsink_map()
在mainfrm.cpp中:
begin_eventsink_map(cmainframe,cframewnd )
on_event(cmainframe,id_commctrl,1,oncommmscomm,vts_none)
//映射activex控件事件
end_eventsink_map()
然后就是写
void CInputDlg::OnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT vResponse;
int k;
CString m_Zero;
if(m_Com.GetCommEvent()==2)
{
k=m_Com.GetInBufferCount();
if(k>0)
{
vResponse=m_Com.GetInput();
}
}
}
但我写的这个东西,在完成一次完整的操作的过程中,要发送多次命令(数据),发送的同时也要多次检测
串口返回的数据(也即捕捉串口事件),然后根据返回的数据结果,再发送下一个命令。
但我不明白,OnCommMscomm1() 函数是什么时候开始执行的???这个函数不是直接调用的,
稍微控制的不好,m_Com.GetCommEvent()这个函数我根本就跟踪不到,
oncommmscomm(); 到底是怎么用的啊