VC中使用MScomm时,如何进行超时处理
我使用MScomm控件写一个串口通信程序,现在想添加一个串口通信超时处理的机制。于是我把超时处理函数加在了OnComm事件中,但每次串口超时后触发两次OnComm事件就不...
我使用MScomm控件写一个串口通信程序,现在想添加一个串口通信超时处理的机制。
于是我把超时处理函数加在了OnComm事件中,但每次串口超时后触发两次OnComm事件就不再触发了,如何解决??
MScomm控件如何处理通信超时?
急。。谢谢大家了!! 展开
于是我把超时处理函数加在了OnComm事件中,但每次串口超时后触发两次OnComm事件就不再触发了,如何解决??
MScomm控件如何处理通信超时?
急。。谢谢大家了!! 展开
1个回答
展开全部
这是我程序中的代码,已经使用了,没有问题。
在CMainFrame中添加两个成员变量,并在构造函数中初始化:
m_bPrepared = false;
m_bInitiated = false;
下面是OnComm函数和OnTimer函数:
void CMainFrame::OnComm()
{
if (!m_bInitiated) // 初始化一次,即第一次信号不接收
{
m_bInitiated = true;
m_bPrepared = true;
return;
}
if (m_msComm.GetCommEvent() == 3) // 接收到信号
{
if(m_bPrepared)
{
// 你的处理函数
Function();
m_bPrepared = false;
SetTimer(1, 500, NULL); // 延时500毫秒
}
}
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent == 1)
{
KillTimer(1);
m_bPrepared = true;
}
CFrameWnd::OnTimer(nIDEvent);
}
在CMainFrame中添加两个成员变量,并在构造函数中初始化:
m_bPrepared = false;
m_bInitiated = false;
下面是OnComm函数和OnTimer函数:
void CMainFrame::OnComm()
{
if (!m_bInitiated) // 初始化一次,即第一次信号不接收
{
m_bInitiated = true;
m_bPrepared = true;
return;
}
if (m_msComm.GetCommEvent() == 3) // 接收到信号
{
if(m_bPrepared)
{
// 你的处理函数
Function();
m_bPrepared = false;
SetTimer(1, 500, NULL); // 延时500毫秒
}
}
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent == 1)
{
KillTimer(1);
m_bPrepared = true;
}
CFrameWnd::OnTimer(nIDEvent);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询