C++的Sleep()很奇怪,出现新问题了
来源:百度知道 编辑:UC知道 时间:2024/05/22 03:14:00
一个难题,m_show是对话框中的一个文本框的变量,初始化为“你好”,
下面是一个Botton函数:
void CDianTiDlg::On9D()
{
m_show.Format("成功了");
UpdateData(false);
Sleep(5000);
m_show.Format("失败了");
UpdateData(false);
}
我的想法是:程序运行,程序的文本框显示“你好”,当点击Buttom时,
文本框显示变为“成功了”,5秒后,文本框显示“失败了”,但是结果是一直显示“你好”,请问高手,怎么能使更新及时显示?
下面是一个Botton函数:
void CDianTiDlg::On9D()
{
m_show.Format("成功了");
UpdateData(false);
Sleep(5000);
m_show.Format("失败了");
UpdateData(false);
}
我的想法是:程序运行,程序的文本框显示“你好”,当点击Buttom时,
文本框显示变为“成功了”,5秒后,文本框显示“失败了”,但是结果是一直显示“你好”,请问高手,怎么能使更新及时显示?
DWORD WINAPI ThreadProc(
LPVOID lpParameter)
{
CEdit *std=(CEdit*)lpParameter;
::Sleep(5000);
std->SetWindowText("失败了");
return 1;
}
void CShowHelloDlg::OnButton1()
{
char *str="成功";
CEdit *std=((CEdit *)GetDlgItem(IDC_EDIT1));
std->SendMessage(WM_SETTEXT,0,(LPARAM)str);
CreateThread(NULL,0,ThreadProc,std,0,NULL);
}
这个是用线程的
如果像你那样在BUTTON里面直接::sleep(5000),那么导致窗口在你点击按钮的5秒时间内将无法处理消息
也可以用CTime
这里是java版块~
这个感觉应该用定时器实现CTimer?和线程没有什么关系吧