MFC如何让一个函数在一个while(1)循环里有条件的被调用

Flandre 2014-01-06 09:43:45
VS写了一个MFC程序,现在有一个函数BeginTest();一个与外界相连会变化的float型变量value;创建了一个线程 UINT TEST(LPVOID pParam)
value的值初始的时候是5,当外界有线路版连接的时候值会变大,假设为10,我要做的是当外界有线路板连接时调用函数BeginTest()去检测value值是否在预设好的范围内
我现在写的是

float value=0.0;
BOOL bResult=false;
void BeginTest()
{
if(value>5&&value<11)
{
bResult=true;
}
if(bResult)
{
::SetDlgItemText(hMain,IDC_RESULT,"PASS"); //控件上显示PASS
}
else
{
::SetDlgItemText(hMain,IDC_RESULT,"FAIL"); //控件上显示FAIL
}
}
UINT TEST(LPVOID pParam)
{
while(1)
{
Sleep(500);
if(value>5)
{
bResult=false; //还有其他一些初始化函数里的变量的代码省略了
BeginTest();
}
}
}


现在的问题是这种算法只要value值大于5(即外界有线路板连接,期间value值会一直保持为10),函数BeginTest()就会被不停的调用,但是想要的不是这种效果,而是value大于5的时候,BeginTest只调用一次,产生一个pass或fail然后让程序没有任何动作,接着外界拿掉线路板,value值恢复为5,当再次接线路板,value值又大于5,然后才再次调用BeginTest()
请问有什么算法能实现这种效果吗,想了两天都没想出来,求指教!!!
...全文
384 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flandre 2014-01-06
  • 打赏
  • 举报
回复
引用 3 楼 xuddk727 的回复:
我整理了一下,你看是否是这样: 当你这个线程某个函数执行失败时,线程挂起(不执行begintest)。 然后外接设备拿掉线路板,再换上线路板,相当于执行一个reset动作。 执行完reset动作后线程继续执行这个函数。 如果是上述路线,那么你问的问题不对,你该问,外接设备如何与某个线程通讯,实质上估摸大概就是质检一类的,装上,检测是否合格,然后换上下一个,继续开始检测。这种需要你检查外接设备是否导通,如是,认为换上了,检测,然后检测卸下,卸下的状态下复位为5,然后在安上时为大于5.至于具体的应该就是做个类似嗅探的,反复去检测
对,就是你说的这种情况,质检,我一开始做了一个eidt控件,按一下键盘开始测试,那样测没有任何问题,按一下测一下,但是顶头的人不满意,说不想按键盘,但是测试工具根本就没有传感器之类的,唯一有变化的就是电流值value会变,顶头人什么都不懂,设备也没那么先进,就想做成这种自动化,放板,测板,放板,测板
许文君 2014-01-06
  • 打赏
  • 举报
回复
我整理了一下,你看是否是这样: 当你这个线程某个函数执行失败时,线程挂起(不执行begintest)。 然后外接设备拿掉线路板,再换上线路板,相当于执行一个reset动作。 执行完reset动作后线程继续执行这个函数。 如果是上述路线,那么你问的问题不对,你该问,外接设备如何与某个线程通讯,实质上估摸大概就是质检一类的,装上,检测是否合格,然后换上下一个,继续开始检测。这种需要你检查外接设备是否导通,如是,认为换上了,检测,然后检测卸下,卸下的状态下复位为5,然后在安上时为大于5.至于具体的应该就是做个类似嗅探的,反复去检测
Flandre 2014-01-06
  • 打赏
  • 举报
回复
引用 1 楼 xuddk727 的回复:
这样不行吗? if(value>5) { value = 5; bResult=false; //还有其他一些初始化函数里的变量的代码省略了 bResult = BeginTest(); if(bReslut) value = 5; }
不可以的,value值不可以对其进行操作,我写的简略了,实际程序是设了一个多次取value值求平均函数把结果赋给一个变量val,实际是拿val去做比较的,不可以对这个值作更改
许文君 2014-01-06
  • 打赏
  • 举报
回复
这样不行吗? if(value>5) { value = 5; bResult=false; //还有其他一些初始化函数里的变量的代码省略了 bResult = BeginTest(); if(bReslut) value = 5; }

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧