如何在你的控制台程序里创建消息循环.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:2 大小:24KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

如何在你的控制台程序里创建消息循环.doc

如何在你的控制台程序里创建消息循环.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

如何在你的控制台程序里创建消息循环2008-10-2112:35我们知道以下的代码完成一个消息循环:{MSGmsg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}}但是,在控制台程序中,如果你创建了这样一个消息循环,在控制台的关闭按钮被点击的时候,并不能正确的产生一个WM_QUIT消息,结果就是:进程被强制中止,所有释放资源的析构函数等等代码都没有被正确执行,如果在VS2003以上版本调试,并打开了内存泄露检测开关,还会产生大量的内存泄露提示。如何解决呢?解决方法就是截获关闭按钮被点击的事件,然后往主线程发一个WM_QUIT消息:DWORDg_dwMainThreadId;BOOLWINAPIConsoleCtrlhandler(DWORDdwCtrlType){if(dwCtrlType==CTRL_CLOSE_EVENT){//PostQuitMessage(0);PostThreadMessage(g_dwMainThreadId,WM_QUIT,0,0);returnTRUE;}returnFALSE;}intmain(){g_dwMainThreadId=GetCurrentThreadId();SetConsoleCtrlHandler(ConsoleCtrlhandler,TRUE);//TODO:Anyinitializecodehere:MSGmsg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}SetConsoleCtrlHandler(ConsoleCtrlhandler,FALSE);//TODO:Anycodetoreleaseresourceshere:return0;}用到了SetConsoleCtrlHandler这个API,具体参数含义及作用详见MSDN,不再冗述。