资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

一个简单的按钮响应问题??

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

比如在一个对话框上放置两个按钮,在第一个按钮的响应函数中首先置另一个按钮DISABLE,然后SLEEP(5000),最后再将另各个按钮恢复为ENABLE.  
  问题是在SLEEP(5000)的时间里点击了一次第二个按钮,5秒钟一过第二个按钮就响应了,有什么办法不让它响应在SLEEP(5000)的时间里点击了第二个按钮的消息.

网友回答:

发表者:hrblg313

设个flag如何  
  sleep时将flag置成false  
  点第二个按钮时先判断flag,再决定响不响应

发表者:edrftgyh

flag   =   FALSE;  
  sleep(5000)  
  flag   =   TRUE;

发表者:mosing

你可以用一个Timmer来解决问题,又不会有消息入队等待的情况。  
  void   CXXXDlg::OnBtn1()  
  {  
  GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);  
  SetTimer(1234,   5000,   NULL);  
  }  
   
  void   CXXXDlg::OnTimer(UINT   nIDEvent)    
  {  
  if   (nIDEvent   ==   1234)  
  GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);  
   
  ...  
  }  
   
 

发表者:mosing

况且你的Sleep()可能会造成整个界面对用户的操作都无法响应,比如移动...   如果Sleep()在你的主线程中。

发表者:sharus

查了msdn  
   
  Sleep:   Description  
  Causes   the   currently   executing   thread   to   sleep   (temporarily   cease   execution)   for   the   specified   number   of   milliseconds.   The   thread   does   not   lose   ownership   of   any   monitors.    
  其中最重要是The   thread   does   not   lose   ownership   of   any   monitors.   中文意思是sleep期间不会失去任何动作。  
 

发表者:oyljerry

sleep不能放到主线程中,否则会阻塞你的程序的,放到线程中  
  然后用一个全局的flag,分别设置为true,false


 

 
热门推荐笔记本: IBM笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved