Heim  >  Fragen und Antworten  >  Hauptteil

c++ – WINAPI-Ausnahme beim Aufruf von SetConsoleHandler beim Schließen des Programms

Ich habe ein Programm geschrieben, das Multithreading verwendet, um einige Daten abzurufen und sie dann in einem Array zu speichern. Als ich dann das Konsolenprogramm schloss, wurde ein Ereignis ausgelöst, und dann habe ich die Daten im Array in eine Datei in diesem Ereignis geschrieben .
Aber wenn ich dieses Programm weniger als 10 Minuten lang ausführe, ist das Schreiben von Dateien normal. Wenn ich das Programm länger als 20 Minuten schließe, werden nur einige Dateien ausgegeben und dann schließt sich das Programm.

Das Folgende ist der Code, der diese Stellen betrifft:
Dies ist der Aufruf von SetConsoleCtrlHandler in der Hauptfunktion

int main(char*argv[], int argc)
{
    //当你关闭的时候做一些处理工作
    SetConsoleCtrlHandler(ConsoleHandler, TRUE);//接受控制台消息,做一些清理工作 
    
    //其他工作
}

Dies ist die spezifische Funktionsimplementierung

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;
}

Hat jemand dieses Problem erlebt?
Hängt das mit dem Puffer zusammen oder so? Denn intuitiv kann es sein, dass mit der Zeit mehr Daten empfangen werden.

仅有的幸福仅有的幸福2686 Tage vor611

Antworte allen(1)Ich werde antworten

  • 怪我咯

    怪我咯2017-05-16 13:26:41

    CTRL_CLOSE_EVENT有超时机制,所以无论写入数据要多久,程序都会在5秒之后关掉。
    可以改用CTRL_C_EVENT。

    Antwort
    0
  • StornierenAntwort