关于让事件只执行一次的问题! 我用MSCOMM控件做串口通信,用脚踏开关,当按下时触发OnCommMscomm事件,可是电压有抖动,OnCommMscomm事件连续执行了好几次,我应该只让OnCommMscomm事件只执行一次,怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加个标记。初始为false。当按下时,先将标记改为true。在事件中根据标记为true时执行,执行完后,再将标记改为false。呵呵。笨方法,也不知管不管用啊。 软件去抖动问题设个标志m_bFlag;OnCommMscomm(){ if(m_bFlag) return; m_bFlag = TRUE; SetTimer(1, 100, NULL);//延时时间根据实际情况设置 //处理串口事件 }OnTimer(int nIDEvent){ KillTimer(1); m_bFlag = FALSE;} void CMyDlg::OnCommMscomm(){ // TODO: 在此处添加消息处理程序代码 if (m_IfCom) { return; } m_IfCom = TRUE; m_nTimer = SetTimer(3, 100, NULL); // 1/10 second switch(m_ctrlComm.get_CommEvent()) { case 5: if (!m_ctrlComm.get_CDHolding()) { //MessageBox("DCD低电平"); if (!GrabPic()) MessageBox("抓取图像出错!"); } break; case 4: if (!m_ctrlComm.get_DSRHolding()) MessageBox("DSR低电平"); break; } }我就是这样做的,可是,不知道怎么回事,每次OnCommMscomm执行,都是从switch(m_ctrlComm.get_CommEvent())下的语句执行,根本不执行if (!m_IfCom) { return; } m_IfCom = TRUE; m_nTimer = SetTimer(3, 100, NULL); // 1/10 second这几句,这是怎么回事呢?是MSCOMM控件属性不对吗?我们用的是脚踏开关,只是靠CD,DSR两条线,按下就表示有效。 我不知道,怎么回事,OnCommMscomm老是执行多次 switch(m_ctrlComm.get_CommEvent()) { case 5: if (m_IfCom) { return; } m_IfCom = TRUE; SetTimer(3, 300, NULL); // if (!m_ctrlComm.get_CDHolding()) { //MessageBox("DCD低电平"); if (!GrabPic()) MessageBox("抓取图像出错!"); } break; case 4: if (m_IfCom) { return; } m_IfCom = TRUE; SetTimer(3,300, NULL); // if (!m_ctrlComm.get_DSRHolding()) MessageBox("DSR低电平"); break; } OnCommMscomm执行时加上OnCommMscomm=NULL(把事件响应函数指针置空值),下次就不会调用了 求救怎么让AfxMessageBox不阻塞啊 大家帮我想想 C# 调用C++写的OCX控件出现HRESULT:0x8000FFFF 关于内存映射文件共享的问题 如何定义子窗口的消息处理函数? vc6 mfc sdi 默认的打印预览,打印按钮ID是什么的? 模拟鼠标平滑移动 结交direct sound高手。 有关线程? vc 中的工程中再添加源文件时,为什么会出现.......? 串口通讯,接受到的数据不对,不知道为什么原因 知道“动态磁盘”“动态卷”的请进!在线等待!!!
设个标志m_bFlag;
OnCommMscomm()
{
if(m_bFlag) return;
m_bFlag = TRUE;
SetTimer(1, 100, NULL);//延时时间根据实际情况设置
//处理串口事件
}OnTimer(int nIDEvent)
{
KillTimer(1);
m_bFlag = FALSE;
}
{
// TODO: 在此处添加消息处理程序代码
if (m_IfCom)
{
return;
} m_IfCom = TRUE;
m_nTimer = SetTimer(3, 100, NULL); // 1/10 second switch(m_ctrlComm.get_CommEvent())
{
case 5:
if (!m_ctrlComm.get_CDHolding())
{
//MessageBox("DCD低电平");
if (!GrabPic())
MessageBox("抓取图像出错!");
}
break;
case 4:
if (!m_ctrlComm.get_DSRHolding())
MessageBox("DSR低电平");
break;
}
}
我就是这样做的,可是,不知道怎么回事,每次
OnCommMscomm执行,都是从switch(m_ctrlComm.get_CommEvent())
下的语句执行,根本不执行
if (!m_IfCom)
{
return;
} m_IfCom = TRUE;
m_nTimer = SetTimer(3, 100, NULL); // 1/10 second
这几句,这是怎么回事呢?
是MSCOMM控件属性不对吗?
我们用的是脚踏开关,只是靠
CD,DSR两条线,按下就表示有效。
执行多次
{
case 5:
if (m_IfCom)
{
return;
}
m_IfCom = TRUE;
SetTimer(3, 300, NULL); //
if (!m_ctrlComm.get_CDHolding())
{
//MessageBox("DCD低电平");
if (!GrabPic())
MessageBox("抓取图像出错!");
}
break;
case 4:
if (m_IfCom)
{
return;
}
m_IfCom = TRUE;
SetTimer(3,300, NULL); //
if (!m_ctrlComm.get_DSRHolding())
MessageBox("DSR低电平"); break;
}