VC手机串口编程
已准备某个函数WaitFor()接收串口数据直到出现期待字符串(如:OK)为止
大多时候都不会出问题
现在想在定时器事件里加上信号检测,也就是说在OnTimer()里也调用WaitFor()
这样问题就来了,执行一个长的WaitFor()时可能OnTimer()也同时调用WaitFor()
最后出现混乱死等现象
请问如何解决??
加标志位好像不行,那样会死锁
我用互斥和信号量好像也不行(是不是我用错了???)请大侠出手。
已准备某个函数WaitFor()接收串口数据直到出现期待字符串(如:OK)为止
大多时候都不会出问题
现在想在定时器事件里加上信号检测,也就是说在OnTimer()里也调用WaitFor()
这样问题就来了,执行一个长的WaitFor()时可能OnTimer()也同时调用WaitFor()
最后出现混乱死等现象
请问如何解决??
加标志位好像不行,那样会死锁
我用互斥和信号量好像也不行(是不是我用错了???)请大侠出手。
最简单的方法是在你的function内部使用一个static BOOL变量,初始化为真
在进入WaitFor之前判断该变量是不是为真,若为真,将其值设为假,执行WaitFor, 若为假,说明已有WaitFor在执行了,退出WaitFor之后再将变量设为
真.伪代码如下:static BOOL bWait=TRUE;
if(bWait)
{
bWait = FALSE;
WaitFor();
}
else
return ;
bWait=TRUE;
return ;我想继续等待呀!
你推荐的办法不行吧
会不小心造成死锁。
那我怎么不要Timer了就正常呢:(windows消息处理是同步的吗?
我的WaitFor里面有消息泵循环!
OnTimer估计激活了
不如你把你的代码以示例的方式贴出来,大家一起修改