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

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

不使用线程编程

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

简单最好。

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

在网上查了好多关于WM_TIMER延时的代码,但都起不到要求那样的延时功能,麻烦知道如何使用的高手指点。最好附上代码^_^
展开
 我来答
皇家救星1985
推荐于2016-11-27 · TA获得超过1131个赞
知道大有可为答主
回答量:1579
采纳率:0%
帮助的人:1666万
展开全部
简单的方法就是设置一个全局变量flag = 0;

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

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

语言表达还要麻烦些
stone_dongdong
2007-11-07 · TA获得超过2853个赞
知道大有可为答主
回答量:1636
采纳率:0%
帮助的人:1022万
展开全部
既然不能使用线程编程。那就:
全局创建一个 Event,(默认不要置,也永远不要置位,具体操作可见MSDN说明),HANDLE hEvent = CreateEvent(NULL,TRUE,FALSE,"ABC");
然后在你的“//这里执行延时程序 ”的地方加上。WaitForSingleObject(hEvent,nTime);nTime为你定义的等待时间,单位毫秒。这也就是延时时间了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6b6835fd2
2007-11-09 · TA获得超过182个赞
知道小有建树答主
回答量:388
采纳率:0%
帮助的人:0
展开全部
////////////////////
//名称:专用延时函数
//说明:没有刷新功能
//参数:系统固定延时值的倍数 默认为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(&msg);

QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq;
}while(dfTim<0.001*1000/value);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Liufei_xnwh
2007-11-07
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
空闲等待其实是等待空闲,在空闲中自动执行。

可以开一个线程,把Sleep(5000)放进去。在你的函数中等待你的线程处于激发状态,用WaitSingleObject。

这种方法,可以不阻塞主线程的用户操作和计时器工作。

Bless.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gis19831203
2007-11-07 · TA获得超过690个赞
知道小有建树答主
回答量:914
采纳率:0%
帮助的人:835万
展开全部
可以利用WM_TIMER消息
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式