MFC对话框响应按键的问题
对话框上有几个按钮,分别是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,...)//创建线程1WatForSingleObject(m_Event.m_hObject,INFINITE);//等待事件}OnButton2(){AfxBeginThread(ThreadFun2,...)//创建线程1}//全局函数或者类静态函数,线程1入口ThreadFun1(LPVOID pParam){ .....//函数返回以前将m_Event设为有信号m_Event.SetEvent()return 0;}这样主线程就不会被挂起,可以响应鼠标或者其他消息。