对话框上有几个按钮,分别是1到5。按键1到5的时候响应相应的函数。
比如按键1,调用OnButton1函数,函数创建一个线程处理发送数据到串口,然后接收串口响应数据。
按键2也一样,只是发送到串口的数据不一样而已。
现在的问题是按了1之后再按2,那么执行OnButton1之后会接着再执行OnButton2。有没有什么办法可以在执行OnButton1完成之前不响应按键消息啊?
过个1秒钟之后再接着响应按键消息?

解决方案 »

  1.   

    按完Button1后的1秒钟内把其他Button禁用掉。
      

  2.   

    禁用不行啊。调用函数void CHnnx_processDlg::OnButton1() 
    禁用了这函数一样可以调用
    按键直接调用该函数的。跟控件是否可用没关啊。
      

  3.   

    加个标记,PreTranslateMessage里过滤WM_KEYDOWN,一个按键处理完成之后才重置该标记
      

  4.   

    最好的方法就是给线程关联一个数据队列,任何BUTTON数据都进入队列。
      

  5.   


    //创建一个全局对象事件对象
    CEvent* m_Event;
    //...
    OnButton1()
    {
    m_Event=new CEvent(FASLE,FALSE);AfxBeginThread(ThreadFun1,...)//创建线程1
    WatForSingleObject(m_Event.m_hObject,INFINITE);//等待事件
    }OnButton2()
    {
    AfxBeginThread(ThreadFun2,...)//创建线程1
    }
    //全局函数或者类静态函数,线程1入口
    ThreadFun1(LPVOID pParam)
    {
       .....
    //函数返回以前将m_Event设为有信号
    m_Event.SetEvent()
    return 0;
    }
    这样主线程就不会被挂起,可以响应鼠标或者其他消息。
      

  6.   

    按钮消息里用一个bool变量做标记不就好了
    启用一个按钮的时候其他都置假
    操作结束之后再射程真
    进消息的时候先看这个变量
    是假直接返回