如果您无法下载资料,请参考说明:
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,不再冗述。