У меня многопоточное приложение под Windows 7.Почему потоки прерываются, даже если выполняется atexit или ConsoleHandler для SetConsoleCtrlhandler?
Мне нужно правильно закончить задания в потоках, которые имеют открытые дескрипторы, соединения и т. Д., Когда пользователь нажимает «X» в углу командной строки, «Ctrl + C ', выключает ОС и так далее.
Я установил обработчик для SetConsoleHandler, который устанавливает соответствующие флаги для других потоков, чтобы правильно завершить работу. Но все они прерываются, а y выходят с кодом 0xc000013a. У SOmetimes даже мой обработчик не успевает установить флаг.
Та же проблема остается, когда я пытаюсь выполнять те же операции в обработчике atexit.
Почему все потоки остановлены даже во время перерыва? Как я могу избежать этого и позволить всем моим потокам закончить работу?
У вас есть 5 секунд, чтобы выполнить работу. Если это займет больше времени, вы будете выполняться в кратном порядке. Скорее всего, вероятность тупика всегда высока. –
Я знаю о 5-секундном лимите, но прерывание происходит раньше. – flashnik
Думаю, вам нужно будет опубликовать код, демонстрирующий проблему, чтобы получить полезный ответ. –