请教,怎么实现延时操作的功能

lsxsxs 2010-05-04 04:26:26
我有一个按钮事件,比如点击了之后就做什么事,然后想在500毫秒之后再让它做一次另外的操作。
在按钮事件中,我的代码是这样的:

int iTick = GetTickCount();
CatchImageTile1();
this->CatchImage1();
DWORD later = iTick;
do
{
later = later - iTick;
}while(later < 500);
CatchImageTitle2();
CatchImage2();

但这样做的时候每次执行的都只是后面的CatchImageTile2()和CatchImage2(),前面的没有执行。把CatchImageTile1()和this->CatchImage1()放到do以内也不行。并且应该还导致了阻塞,点了一次之后再点都没反应,非要过几秒才有反应。
各位大哥能帮我指出一下错误在哪里吗,还是根本就不能用这个方法做。
...全文
326 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
hasea 2010-05-05
  • 打赏
  • 举报
回复
用定时器试试吧。
taotao714 2010-05-05
  • 打赏
  • 举报
回复
SetTimer设计计时器 ontimer响应事件 killtimer销毁
dsswxl 2010-05-05
  • 打赏
  • 举报
回复
do
{
later = later - iTick;
}while(later < 500);
later = later - iTick; 假如你现在得到的时间是1336296,那么下次得到的话可能是1389640,1389640 - 1336296 = 53344,结果够大吧,但是他绝对比iTick小很多,因此第一次执行时,later可能大于500(53344比500大),但是第二次执行later = later - iTick就比500小很多了,接着死循环。建议使用SetTimer
waitlife 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jennyvenus 的回复:]
C/C++ code

//***********************************
//响应系统消息
//***********************************
void
doevents( void )
{
//使用peekmessage
MSG msg;

if( PeekMessage( &msg, NUL……
[/Quote]
这个很不错,有延时,也响应消息
lijianli9 2010-05-05
  • 打赏
  • 举报
回复
开启线程吧,然后在中sleep也不会阻塞主线程(界面线程)。
starytx 2010-05-05
  • 打赏
  • 举报
回复
用定时器把,按下按钮后
SetTimer(0,500,NULL); //设置一个500ms触发一次的定时器
在定时器里做另外一次操作后,
KillTimer(0); // 关闭定时器
向立天 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lsxsxs 的回复:]
我是举得一个例子,是按钮事件,实际上是要处理一些传回来的数据,但要对一个数据进行两个操作,并且是有点时间间隔。所以用Sleep()不行,我只有在网上找了点其他方法,但还是没成功
[/Quote]

放到独立线程中去做
通过event调度一下
vivvan 2010-05-05
  • 打赏
  • 举报
回复
用循环太费CPU了
vivvan 2010-05-05
  • 打赏
  • 举报
回复
waitforsingalobject(m_hobject,500);
sundl2268 2010-05-05
  • 打赏
  • 举报
回复
我没有看上面的回复,利用第一反应,用 定时器怎么样呢..
1段时间执行一次那种
lsxsxs 2010-05-05
  • 打赏
  • 举报
回复
7楼的方法用了下,程序死了。我刚学不久,想问一下怎么新开一个线程
tanwei1002 2010-05-05
  • 打赏
  • 举报
回复
sleep
visualassist4680 2010-05-05
  • 打赏
  • 举报
回复
settimer
在ontimer 里处理,同时 killtimer
hao3039032 2010-05-05
  • 打赏
  • 举报
回复
线程池里有个异步回调……可以考虑用用……
vann1982 2010-05-04
  • 打赏
  • 举报
回复
开线程+定时器
尹成 2010-05-04
  • 打赏
  • 举报
回复
到线程里做Sleep(500)
klkvc386 2010-05-04
  • 打赏
  • 举报
回复
Timer..........
13880079673 2010-05-04
  • 打赏
  • 举报
回复
直接在窗口上添加一个OnTimer的事件就可以了
wilson_hz 2010-05-04
  • 打赏
  • 举报
回复
这个按钮事件用一个独立的线程来处理。UI编程中不能直接Sleep的。
lsxsxs 2010-05-04
  • 打赏
  • 举报
回复
我是举得一个例子,是按钮事件,实际上是要处理一些传回来的数据,但要对一个数据进行两个操作,并且是有点时间间隔。所以用Sleep()不行,我只有在网上找了点其他方法,但还是没成功
加载更多回复(7)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧