我寫了一個程序,用多線程獲得一些數據,然後存入數組,然後當我關閉這個控制台程序的時候會觸發一個事件,然後我在這個事件裡面把數組中的數據寫入文件。
但是當我這個程式跑10分鐘以內的時候寫入檔案都正常的,20分鐘以上我關閉程式的時候會只輸出一些檔案然後程式就自己關閉了。
下面是涉及到這些地方的程式碼:
這是在主函式中呼叫SetConsoleCtrlHandler
int main(char*argv[], int argc) { //当你关闭的时候做一些处理工作 SetConsoleCtrlHandler(ConsoleHandler, TRUE);//接受控制台消息,做一些清理工作 //其他工作 }
這是具體的函數實作
BOOL WINAPI ConsoleHandler(DWORD msgType) { Print("I'm closing\n"); if (msgType == CTRL_C_EVENT ||msgType == CTRL_CLOSE_EVENT) { if (g_hTDF) { WriteResult(str);//这里就是我把数组中的内容写入文件的程序 Print("console Close complete!\n"); system("pause"); return TRUE; } return TRUE; }
請問有沒有大神碰到過這個問題?
這個跟緩衝區什麼的有沒有關係呢?因為直覺來說,可能是時間長了導致接收的資料多了。
CTRL_CLOSE_EVENT有超時機制,所以無論寫入資料要多久,程式都會在5秒之後關掉。
可以改用CTRL_C_EVENT。