VC手机串口编程
已准备某个函数WaitFor()接收串口数据直到出现期待字符串(如:OK)为止
大多时候都不会出问题
现在想在定时器事件里加上信号检测,也就是说在OnTimer()里也调用WaitFor()
这样问题就来了,执行一个长的WaitFor()时可能OnTimer()也同时调用WaitFor()
最后出现混乱死等现象
请问如何解决??
加标志位好像不行,那样会死锁
我用互斥和信号量好像也不行(是不是我用错了???)请大侠出手。

解决方案 »

  1.   

    用多线程.Ontimer可不是多线程的,你别的地方在执行的时候,别指望它会执行.
      

  2.   

    其实很简单啊,你可以使用MUTEX ,Critical Section, 来控制同步,
    最简单的方法是在你的function内部使用一个static BOOL变量,初始化为真
    在进入WaitFor之前判断该变量是不是为真,若为真,将其值设为假,执行WaitFor, 若为假,说明已有WaitFor在执行了,退出WaitFor之后再将变量设为
    真.伪代码如下:static BOOL bWait=TRUE;
    if(bWait)
    {
      bWait = FALSE;
      WaitFor();
    }
    else
       return ;
    bWait=TRUE;
      
      

  3.   

    else
       return ;我想继续等待呀!
    你推荐的办法不行吧
    会不小心造成死锁。
      

  4.   

    对,你的WaitFor()没有完成,OnTimer的消息将被丢掉。多线程,创建event控制
      

  5.   

    WaitFor()没有完成,OnTimer的消息将被丢掉吗?
    那我怎么不要Timer了就正常呢:(windows消息处理是同步的吗?
      

  6.   

    突然想起来了
    我的WaitFor里面有消息泵循环!
    OnTimer估计激活了
      

  7.   

    如果有多个WM_TIMER消息没有被处理掉将会被系统合成最新的一个。
    不如你把你的代码以示例的方式贴出来,大家一起修改