日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式

發布時間:2024/10/8 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

百度可以找到很多關于這個問題解決的方法

關鍵控制臺API函數:SetConsoleCtrlHandler

在支持C++ 11以上的編譯器中,你可以這么做。

SetConsoleCtrlHandler([](DWORD fdwctrltype)->BOOL {

if (fdwctrltype == CTRL_CLOSE_EVENT) {

// 你的善后代碼...

return TRUE;

}

return FALSE;

}, TRUE);

最初這么做是很舒服的,但之后發現了問題:

Windows控制臺在標記狀態下,printf之類的輸出函數,會阻塞在標記選擇時(點控制臺左上角-編輯-標記)。

這就導致了,我們的善后代碼中,可能會死鎖,例如你要優雅的結束一個線程,這個線程在最后的時候printf了。

線程里printf等待標記狀態,SetConsoleCtrlHandler回調函數里等待線程結束,總之就是死鎖。

我本來想著,去找到能夠獲取這種標記狀態的控制臺API,但找了很久都沒有結果。

最后,我就考慮,有沒有方法讓printf不與標記狀態發生死鎖,答案是: 輸出流重定向。

所以,代碼變成這樣:

SetConsoleCtrlHandler([](DWORD fdwctrltype)->BOOL {

if (fdwctrltype == CTRL_CLOSE_EVENT) {

char szbuf[0x1000];

setvbuf(stdout, szbuf, _IOFBF, 0x1000);

// 你的善后代碼...

return TRUE;

}

return FALSE;

}, TRUE);

這么做之后,世界果然更美好了,如果最后這些日志信息對你來說是重要的,那么你可能需要寫更多代碼去實現。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。