c++ - Exception WinAPI lors de l'appel de SetConsoleHandler lors de la fermeture du programme
仅有的幸福
仅有的幸福 2017-05-16 13:24:41
0
1
670

J'ai écrit un programme qui utilisait le multithread pour obtenir certaines données, puis je les stockais dans un tableau. Ensuite, lorsque j'ai fermé le programme console, un événement a été déclenché, puis j'ai écrit les données du tableau dans un fichier dans cet événement. .
Mais lorsque j'exécute ce programme pendant moins de 10 minutes, l'écriture de fichiers est normale. Lorsque je ferme le programme pendant plus de 20 minutes, il ne produira que certains fichiers, puis le programme se fermera.

Voici le code impliquant ces endroits :
Il s'agit de l'appel à SetConsoleCtrlHandler dans la fonction principale

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

Il s'agit de l'implémentation spécifique de la fonction

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

Quelqu'un a-t-il rencontré ce problème ?
Est-ce lié au tampon ou quelque chose comme ça ? Car intuitivement, il se peut que davantage de données soient reçues au fil du temps.

仅有的幸福
仅有的幸福

répondre à tous(1)
刘奇

CTRL_CLOSE_EVENT dispose d'un mécanisme de délai d'attente, donc quel que soit le temps nécessaire à l'écriture des données, le programme s'arrêtera après 5 secondes.
Vous pouvez utiliser CTRL_C_EVENT à la place.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal