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.
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.