类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
比如在一个对话框上放置两个按钮,在第一个按钮的响应函数中首先置另一个按钮DISABLE,然后SLEEP(5000),最后再将另各个按钮恢复为ENABLE.
问题是在SLEEP(5000)的时间里点击了一次第二个按钮,5秒钟一过第二个按钮就响应了,有什么办法不让它响应在SLEEP(5000)的时间里点击了第二个按钮的消息.
网友回答:
设个flag如何
sleep时将flag置成false
点第二个按钮时先判断flag,再决定响不响应
flag = FALSE;
sleep(5000)
flag = TRUE;
你可以用一个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);
...
}
况且你的Sleep()可能会造成整个界面对用户的操作都无法响应,比如移动... 如果Sleep()在你的主线程中。
查了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期间不会失去任何动作。
sleep不能放到主线程中,否则会阻塞你的程序的,放到线程中
然后用一个全局的flag,分别设置为true,false