求一个MFC中的延时功能(急)

来源:百度知道 编辑:UC知道 时间:2024/07/04 20:24:46
程序说明如下:
//DlgDlg.cpp
...
void OnButton1()
{
//这里执行延时程序
int a;
...
}
...
/////////////////////
OnButton1是某按钮的响应函数,当按下此按钮后,如何实现延时5秒后再执行int a;这句话,及其后面的语句。
要求,延时的时候,外界不能停止工作,比如:
CDlgDlg 类中,有一个计时器在工作,上段代码延时时,不能使此计时器停止工作。
本人,用Sleep(5000)延时,会使计时器也停止工作,不符合要求。

不使用线程编程

最好用SetTimer()和OnTimer()实现,不行的话,其它方法也可以。

简单最好。

MFC处理消息时,有个空闲等待函数Oidle(),不知能否使用,高手指点下....
WM_TIMER本人试过了,但不如所愿。

在网上查了好多关于WM_TIMER延时的代码,但都起不到要求那样的延时功能,麻烦知道如何使用的高手指点。最好附上代码^_^

简单的方法就是设置一个全局变量flag = 0;

void OnButton1()
{
if(flag == 0)
{
SetTimer(...);
return;
}
flag = 0;
killtimer(...)
int a;
...
}
OnTimer()
{
flag = 1;
OnButton1();
}
------------------------
只是讲个思路,代码并不全

只是大概表示一下,应该能看明白吧?

语言表达还要麻烦些

////////////////////
//名称:专用延时函数
//说明:没有刷新功能
//参数:系统固定延时值的倍数 默认为1倍
//返回值:
//其它:不独占方式
////////////////////
void SleepEx(int value=100)
{

LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; // 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);

QPart1 = litmp.QuadPart;

do{

//增加消息处理 删除则在此期间不响应任何消息
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&