我寫了一個(gè)程序,用多線程獲得一些數(shù)據(jù),然后存入數(shù)組,然后當(dāng)我關(guān)閉這個(gè)控制臺(tái)程序的時(shí)候會(huì)觸發(fā)一個(gè)事件,然后我在這個(gè)事件里面把數(shù)組中的數(shù)據(jù)寫入文件。
但是當(dāng)我這個(gè)程序跑10分鐘以內(nèi)的時(shí)候?qū)懭胛募颊5模?0分鐘以上我關(guān)閉程序的時(shí)候會(huì)只輸出一些文件然后程序就自己關(guān)閉了。
下面是涉及到這些地方的代碼:
這是主函數(shù)中調(diào)用SetConsoleCtrlHandler
int main(char*argv[], int argc)
{
//當(dāng)你關(guān)閉的時(shí)候做一些處理工作
SetConsoleCtrlHandler(ConsoleHandler, TRUE);//接受控制臺(tái)消息,做一些清理工作
//其他工作
}
這是具體的函數(shù)實(shí)現(xiàn)
BOOL WINAPI ConsoleHandler(DWORD msgType)
{
Print("I'm closing\n");
if (msgType == CTRL_C_EVENT ||msgType == CTRL_CLOSE_EVENT)
{
if (g_hTDF)
{
WriteResult(str);//這里就是我把數(shù)組中的內(nèi)容寫入文件的程序
Print("console Close complete!\n");
system("pause");
return TRUE;
}
return TRUE;
}
請(qǐng)問有沒有大神碰到過這個(gè)問題?
這個(gè)和緩沖區(qū)什么的有沒有關(guān)系呢?因?yàn)橹庇X來說,可能是時(shí)間長了導(dǎo)致接收的數(shù)據(jù)多了。
CTRL_CLOSE_EVENT有超時(shí)機(jī)制,所以無論寫入數(shù)據(jù)要多久,程序都會(huì)在5秒之后關(guān)掉。
可以改用CTRL_C_EVENT。