我做了一个串口和调制解调器通信的程序,
在一个函数里边,如,CTempratureView::OnTimer(UINT nIDEvent) 里边拨号,
在CTempratureView::OnCommMscomm() 里边进行数据处理
那么我如何在CTempratureView::OnTimer(UINT nIDEvent)里边判断CTempratureView::OnCommMscomm() 的数据处理完毕呢

解决方案 »

  1.   

    在OnCommMscomm里放置一个标志,然后用OnTimer去检查这个标志.
    e.g.
    在CTempratureView里声明一个成员变里BOOL m_bIsFinished;
    先置为否;OnCommMscomm处理完成后置为是.用OnTimer去检查这个标志.
      

  2.   

    我就是这样做的,但是不好使啊,我在OnTimer里边设置了一个循环,不断检查标志的值,但是程序始终退不出循环
      

  3.   

    OnCommMscomm
    采取的是事件消息机制
    而不是中断机制楼主这样做在DOS下是可行的,但是在windows下,这样做是不对的。
      

  4.   

    你把定时器关了,在OnCommMscomm中时间处理完了在开定时器可以不?
      

  5.   

    不能在OnTimer里用循环来判断的,loop循环要改成消息循环就好了具体这样写(当然要防止有重复嵌套执行的动作) long lFirst = GetTickCount(); do 
    {
    MSG msg;
    GetMessage( &msg, NULL, 0, 0 );
    TranslateMessage( &msg );
    DispatchMessage( &msg );
    PostMessage((BYTE)this,WM_PAINT );
    } while ( !r_exitflag && GetTickCount() - lFirst < 5000 ); 
    // 只有读完接收的字节或者5秒内没任何反应才会结束循环
    r_exitflag是你在OnCommMscomm里去设置的,做完然后让其=true,如果啥也没有,5秒后就结束不知道这样做是否让你管用