求一个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延时的代码,但都起不到要求那样的延时功能,麻烦知道如何使用的高手指点。最好附上代码^_^ 展开
//DlgDlg.cpp
...
void OnButton1()
{
//这里执行延时程序
int a;
...
}
...
/////////////////////
OnButton1是某按钮的响应函数,当按下此按钮后,如何实现延时5秒后再执行int a;这句话,及其后面的语句。
要求,延时的时候,外界不能停止工作,比如:
CDlgDlg 类中,有一个计时器在工作,上段代码延时时,不能使此计时器停止工作。
本人,用Sleep(5000)延时,会使计时器也停止工作,不符合要求。
不使用线程编程
最好用SetTimer()和OnTimer()实现,不行的话,其它方法也可以。
简单最好。
MFC处理消息时,有个空闲等待函数Oidle(),不知能否使用,高手指点下....
WM_TIMER本人试过了,但不如所愿。
在网上查了好多关于WM_TIMER延时的代码,但都起不到要求那样的延时功能,麻烦知道如何使用的高手指点。最好附上代码^_^ 展开
5个回答
展开全部
既然不能使用线程编程。那就:
全局创建一个 Event,(默认不要置,也永远不要置位,具体操作可见MSDN说明),HANDLE hEvent = CreateEvent(NULL,TRUE,FALSE,"ABC");
然后在你的“//这里执行延时程序 ”的地方加上。WaitForSingleObject(hEvent,nTime);nTime为你定义的等待时间,单位毫秒。这也就是延时时间了
全局创建一个 Event,(默认不要置,也永远不要置位,具体操作可见MSDN说明),HANDLE hEvent = CreateEvent(NULL,TRUE,FALSE,"ABC");
然后在你的“//这里执行延时程序 ”的地方加上。WaitForSingleObject(hEvent,nTime);nTime为你定义的等待时间,单位毫秒。这也就是延时时间了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
////////////////////
//名称:专用延时函数
//说明:没有刷新功能
//参数:系统固定延时值的倍数 默认为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);
}
//名称:专用延时函数
//说明:没有刷新功能
//参数:系统固定延时值的倍数 默认为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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
空闲等待其实是等待空闲,在空闲中自动执行。
可以开一个线程,把Sleep(5000)放进去。在你的函数中等待你的线程处于激发状态,用WaitSingleObject。
这种方法,可以不阻塞主线程的用户操作和计时器工作。
Bless.
可以开一个线程,把Sleep(5000)放进去。在你的函数中等待你的线程处于激发状态,用WaitSingleObject。
这种方法,可以不阻塞主线程的用户操作和计时器工作。
Bless.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以利用WM_TIMER消息
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询