MFC 让程序停一下 但不卡住的办法

本文介绍了一种方法,在不阻塞主界面的情况下实现程序暂停一秒钟的功能,通过使用WaitEx函数和线程,实现了在指定毫秒数后继续执行程序,同时保持界面流畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不管是因为要偷懒还是确实有这个需求,有时候我会遇到这样的需求,程序执行到某处的时候 我要停一秒再继续,但还不能让界面卡主。显然用系统自带的sleep函数 会导致主界面卡死。 那么怎么办呢? 我想有经验的程序猿 一定可以说出至少100种解决办法(稍微有点夸张)。不过我只会一种(因为会一种就行了)!!!!

那就是调用WaitEx函数,这个函数不是api哦 下面我把代码贴上

typedef struct _WAITDATA1
{
_WAITDATA1()
{
  bExitFlag = FALSE;
  dwTime = 0;
}
BOOL bExitFlag;
DWORD dwTime;
} WAITDATA1, *LPWAITDATA1;

UINT ThreadWait( LPVOID pParam )
{
  LPWAITDATA1 data = (LPWAITDATA1)(pParam);
  Sleep( data->dwTime );
  data->bExitFlag = TRUE;
  return 0;
}

void WaitEx( int iMillSec )
{
  WAITDATA1 data;
  data.dwTime = iMillSec;
  AfxBeginThread( ThreadWait, &data );
  MSG msg;
  ZeroMemory( &msg, sizeof(msg) );
  while( !data.bExitFlag )
  {
   if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
   {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
   }

  }
}

前边的乱七八糟的 都是为WaitEx服务的 不用管

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值