最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vc控制臺(tái)程序關(guān)閉事件時(shí)的處理方式及注意點(diǎn)詳解

 更新時(shí)間:2021年12月05日 15:07:47   作者:babypapa  
在本篇文章里小編給大家整理的是一篇關(guān)于vc控制臺(tái)程序關(guān)閉事件時(shí)的正確處理方式的相關(guān)知識(shí)點(diǎn)內(nèi)容,對(duì)此有需求的朋友們可以參閱下。

百度可以找到很多關(guān)于這個(gè)問(wèn)題解決的方法

關(guān)鍵控制臺(tái)API函數(shù):SetConsoleCtrlHandler

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

SetConsoleCtrlHandler([](DWORD fdwctrltype)->BOOL {
    if (fdwctrltype == CTRL_CLOSE_EVENT) {
        // 你的善后代碼...
        return TRUE;
    }
    return FALSE;
}, TRUE);

最初這么做是很舒服的,但之后發(fā)現(xiàn)了問(wèn)題:

Windows控制臺(tái)在標(biāo)記狀態(tài)下,printf之類的輸出函數(shù),會(huì)阻塞在標(biāo)記選擇時(shí)(點(diǎn)控制臺(tái)左上角-編輯-標(biāo)記)。

這就導(dǎo)致了,我們的善后代碼中,可能會(huì)死鎖,例如你要優(yōu)雅的結(jié)束一個(gè)線程,這個(gè)線程在最后的時(shí)候printf了。

線程里printf等待標(biāo)記狀態(tài),SetConsoleCtrlHandler回調(diào)函數(shù)里等待線程結(jié)束,總之就是死鎖。

我本來(lái)想著,去找到能夠獲取這種標(biāo)記狀態(tài)的控制臺(tái)API,但找了很久都沒(méi)有結(jié)果。

最后,我就考慮,有沒(méi)有方法讓printf不與標(biāo)記狀態(tài)發(fā)生死鎖,答案是: 輸出流重定向。

所以,代碼變成這樣:

SetConsoleCtrlHandler([](DWORD fdwctrltype)->BOOL {
    if (fdwctrltype == CTRL_CLOSE_EVENT) {
        char szbuf[0x1000];
        setvbuf(stdout, szbuf, _IOFBF, 0x1000);
        // 你的善后代碼...
        return TRUE;
    }
    return FALSE;
}, TRUE);

這么做之后,世界果然更美好了,如果最后這些日志信息對(duì)你來(lái)說(shuō)是重要的,那么你可能需要寫更多代碼去實(shí)現(xiàn)。

知識(shí)點(diǎn)擴(kuò)展:

實(shí)例:

BOOL WINAPI ConsoleHandler(DWORD CEvent)
{
DWORD e = 0;
switch (CEvent)
{
case CTRL_C_EVENT:
e = CTRL_C_EVENT;
break;
case CTRL_BREAK_EVENT:
e = CTRL_BREAK_EVENT;
break;
case CTRL_CLOSE_EVENT:
e = CTRL_CLOSE_EVENT;
break;
case CTRL_LOGOFF_EVENT:
break;
case CTRL_SHUTDOWN_EVENT:
break;
}
return true;
}
int main(int argc, char* argv[])
{
if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE) == FALSE)
{
//安裝失敗
return -1;
}
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); //手工產(chǎn)生一事件
}

到此這篇關(guān)于vc控制臺(tái)程序關(guān)閉事件時(shí)的處理方式及注意點(diǎn)詳解的文章就介紹到這了,更多相關(guān)vc控制臺(tái)程序關(guān)閉事件時(shí)的正確處理方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言獲取文件長(zhǎng)度的方法

    C語(yǔ)言獲取文件長(zhǎng)度的方法

    這篇文章主要介紹了C語(yǔ)言獲取文件長(zhǎng)度的相關(guān)知識(shí),包括使用標(biāo)準(zhǔn)庫(kù)方法和使用Linux系統(tǒng)調(diào)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • C語(yǔ)言實(shí)現(xiàn)注冊(cè)登錄系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)注冊(cè)登錄系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)注冊(cè)登錄系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 圖文詳解c/c++中的多級(jí)指針與多維數(shù)組

    圖文詳解c/c++中的多級(jí)指針與多維數(shù)組

    多維數(shù)組與多級(jí)指針是初學(xué)者經(jīng)常感覺迷糊的一個(gè)地方。超過(guò)二維的數(shù)組和超過(guò)二級(jí)的指針其實(shí)并不多用。但只要掌握一定的方法,理解多級(jí)指針和“多維”數(shù)組完全可以像理解一級(jí)指針和一維數(shù)組那樣簡(jiǎn)單。
    2016-08-08
  • C++?如何使用棧求解中綴、后綴表達(dá)式的值

    C++?如何使用棧求解中綴、后綴表達(dá)式的值

    這篇文章主要介紹了C++?使用棧求解中綴、后綴表達(dá)式的值,本文講解了中綴、后綴表達(dá)式的求值過(guò)程以及如何將一個(gè)中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式,需要的朋友可以參考下
    2022-10-10
  • 詳解C++17中的decltype類型推導(dǎo)

    詳解C++17中的decltype類型推導(dǎo)

    這篇文章主要介紹了C++17中的decltype類型推導(dǎo),本文從泛型編程中經(jīng)常會(huì)遇到2個(gè)常見問(wèn)題入手,循序漸進(jìn)的分析了從C++11開始引入的關(guān)鍵字decltype,需要的朋友可以參考下
    2023-06-06
  • C++如何有效地利用命名空間

    C++如何有效地利用命名空間

    談到C++編程中的模塊化和組織性時(shí),命名空間(Namespace)是一個(gè)重要的概念,所以本文主要來(lái)和大家聊聊C++命名空間的概念、用法以及如何有效地利用它來(lái)管理代碼,有需要的可以參考下
    2023-09-09
  • C語(yǔ)言示例講解while循環(huán)語(yǔ)句的用法

    C語(yǔ)言示例講解while循環(huán)語(yǔ)句的用法

    在不少實(shí)際問(wèn)題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語(yǔ)句。一組被重復(fù)執(zhí)行的語(yǔ)句稱之為循環(huán)體,C語(yǔ)言while語(yǔ)句可以是單個(gè)語(yǔ)句,也可以是一個(gè)語(yǔ)句塊,其條件可以是任意表達(dá)式,true是任意非零值,當(dāng)條件為真時(shí),循環(huán)進(jìn)行迭代
    2022-06-06
  • C++中priority_queue的使用與模擬實(shí)現(xiàn)

    C++中priority_queue的使用與模擬實(shí)現(xiàn)

    本文主要介紹了C++中priority_queue的使用與模擬實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++?STL容器與函數(shù)謂詞示例分析講解

    C++?STL容器與函數(shù)謂詞示例分析講解

    這篇文章主要介紹了C++?STL容器與函數(shù)謂詞示例,STL是“Standard?Template?Library”的縮寫,中文譯為“標(biāo)準(zhǔn)模板庫(kù)”。STL是C++標(biāo)準(zhǔn)庫(kù)的一部分,不用單獨(dú)安裝
    2022-11-11
  • 一文帶你了解C語(yǔ)言中的動(dòng)態(tài)內(nèi)存管理函數(shù)

    一文帶你了解C語(yǔ)言中的動(dòng)態(tài)內(nèi)存管理函數(shù)

    C語(yǔ)言中內(nèi)存管理相關(guān)的函數(shù)主要有realloc、calloc、malloc、free等,這篇文章主要為大家講解一下這四個(gè)函數(shù)的具體用法,需要的可以參考一下
    2023-03-03

最新評(píng)論

木兰县| 新营市| 瑞昌市| 汝城县| 石阡县| 汕头市| 深水埗区| 西青区| 壶关县| 泊头市| 伊金霍洛旗| 南投市| 营山县| 瑞金市| 明溪县| 鲜城| 大方县| 蒙城县| 夏邑县| 汕头市| 磴口县| 南丹县| 桑植县| 曲阳县| 内乡县| 涞源县| 武汉市| 格尔木市| 峨边| 昭通市| 荥阳市| 池州市| 宣汉县| 游戏| 丹阳市| 观塘区| 田林县| 珲春市| 永福县| 宁陕县| 馆陶县|