MFC对话框响应按键的有关问题
MFC对话框响应按键的问题
对话框上有几个按钮,分别是1到5。按键1到5的时候响应相应的函数。
比如按键1,调用OnButton1函数,函数创建一个线程处理发送数据到串口,然后接收串口响应数据。
按键2也一样,只是发送到串口的数据不一样而已。
现在的问题是按了1之后再按2,那么执行OnButton1之后会接着再执行OnButton2。
有没有什么办法可以在执行OnButton1完成之前不响应按键消息啊?
过个1秒钟之后再接着响应按键消息?
------解决方案--------------------
加个标记,PreTranslateMessage里过滤WM_KEYDOWN,一个按键处理完成之后才重置该标记
------解决方案--------------------
最好的方法就是给线程关联一个数据队列,任何BUTTON数据都进入队列。
------解决方案--------------------
创建一个事件内核对象,在按钮2创建线程2后,将线程2挂起,等待事件。
在网上搜事件内核对象线程同步。
------解决方案--------------------
对话框上有几个按钮,分别是1到5。按键1到5的时候响应相应的函数。
比如按键1,调用OnButton1函数,函数创建一个线程处理发送数据到串口,然后接收串口响应数据。
按键2也一样,只是发送到串口的数据不一样而已。
现在的问题是按了1之后再按2,那么执行OnButton1之后会接着再执行OnButton2。
有没有什么办法可以在执行OnButton1完成之前不响应按键消息啊?
过个1秒钟之后再接着响应按键消息?
------解决方案--------------------
加个标记,PreTranslateMessage里过滤WM_KEYDOWN,一个按键处理完成之后才重置该标记
------解决方案--------------------
最好的方法就是给线程关联一个数据队列,任何BUTTON数据都进入队列。
------解决方案--------------------
创建一个事件内核对象,在按钮2创建线程2后,将线程2挂起,等待事件。
在网上搜事件内核对象线程同步。
------解决方案--------------------
- C/C++ code
//创建一个全局对象事件对象 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; } 这样主线程就不会被挂起,可以响应鼠标或者其他消息。