VS2010下DoEvents

8 篇文章 0 订阅


VB和C#下有一个DoEvents方法,可以让程序在执行操作的同时仍可以处理其他事件。由于近期在做一个数据格式转换的项目,需要进行大批量的数据处理,希望能在进行数据读写过程中,程序还能接收其他操作,防止假死现象。百度了一下,发现VB和C#下有此函数,VC下需自己写。

MSDN说明:

  DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。

  DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。

VC版DoEvents

void DoEvents()  
02.{  
03.    MSG msg;  
04.    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))  
05.    {  
06.        DispatchMessage(&msg);  
07.        TranslateMessage(&msg);  
08.    }   
09.}  

以上是网上的一种方法,结合自己项目需求,写DoEvents()如下:

void DoEvents()
{
	MSG msg;
	if(::PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
		if(msg.message == WM_QUIT){
			::PostQuitMessage(-1);
		}
		if(!AfxGetApp()->PreTranslateMessage(&msg)){
			::TranslateMessage(&msg);
			::DispatchMessage(&msg);
		}
	}
	AfxGetApp()->OnIdle(0);
	AfxGetApp()->OnIdle(1);
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值