WSACleanup и atExit

открыть параметры поиска, когда вы делаете поиск / замену. проверьте чувствительный к регистру вариант. вам придется делать ароматизаторы вручную, если вы не сделаете что-то вроде: http://www.aaronlerch.com/blog/2007/03/28/visual-studio-find-and-replace-regular-expressions/ , или используйте что-то вроде: http://www.download3k.com/MP3-Audio-Video/Utilities-Plug-Ins/Download-Find-Replace.html

6
задан MD XF 22 March 2017 в 18:06
поделиться

3 ответа

Если у вас есть многопоточное приложение и некоторые потоки все еще подключены, приложениям на другом конце может не понравиться способ разрыва соединения. Поэтому предпочтительно закрыть все коммуникации в упорядоченном порядке до завершения main (), и когда вы это сделаете, вы можете также вызвать WSACleanup.

4
ответ дан 17 December 2019 в 00:13
поделиться

Я согласен с тем, что подход RAII является благоприятным.

Однако одно предупреждение: atExit, смешанный с dll и дескрипторами, не работает в Windows. К сожалению, это также влияет на RAII, поскольку это реализовано с помощью обработчиков atExit средой выполнения c ++.

Порядок, в котором обработчики atexit вызываются в окнах:

  1. где-то вызывается exit или main () выходит за рамки
  2. обработчики atexit определенные в процессе вызываются.
  3. все дескрипторы уничтожаются.
  4. вызываются обработчики atexit, определенные в dll.

Не имеет значения, зарегистрированы ли обработчики atexit в dll перед обработчиками процесса, которые обрабатываются обработчиками процесса. вызывается первым, и дескрипторы уничтожаются до вызова обработчиков dll. Это приводит к исключениям win32, когда вызывается код очистки, поскольку все дескрипторы, принадлежащие dll, больше не действительны.

Этот код эффектов содержит дескрипторы потоков, мьютексов, файлов, сокетов и т. Д. Если они размещены в dll, то они должны быть очищены до вызова exit или не вызываются вовсе.

Кстати, я не anti window, если я ошибаюсь или кто-то знает способ обойти это, я хотел бы знать, так как это причиняет мне невыразимую боль при очистке приложения. Я понял, что это отладка обработки выхода в среде выполнения c ++ после получения исключений win32 при выходе из приложений.

Мне пришлось удалить все вызовы для выхода из моего кода. Теперь я убедился, что никакие статические данные в dll не управляют дескриптором. Все статические дескрипторы управляются объектами, которые разрушаются, когда main выходит за пределы области видимости.

Между прочим, я не противник окна, если я ошибаюсь или кто-то знает способ обойти это, я хотел бы знать, так как это причиняет мне невыразимую боль при очистке приложения. Я понял, что это отладка обработки выхода в среде выполнения c ++ после получения исключений win32 при выходе из приложений.

Мне пришлось удалить все вызовы для выхода из моего кода. Теперь я убедился, что никакие статические данные в dll не управляют дескриптором. Все статические дескрипторы управляются объектами, которые разрушаются, когда main выходит за пределы области видимости.

Между прочим, я не противник окна, если я ошибаюсь или кто-то знает способ обойти это, я хотел бы знать, так как это причиняет мне невыразимую боль при очистке приложения. Я понял, что это отладка обработки выхода в среде выполнения c ++ после получения исключений win32 при выходе из приложений.

Мне пришлось удалить все вызовы для выхода из моего кода. Теперь я убедился, что никакие статические данные в dll не управляют дескриптором. Все статические дескрипторы управляются объектами, которые разрушаются, когда main выходит за пределы области видимости.

Теперь я убедился, что никакие статические данные в dll не управляют дескриптором. Все статические дескрипторы управляются объектами, которые разрушаются, когда main выходит за пределы области видимости.

Теперь я убедился, что никакие статические данные в dll не управляют дескриптором. Все статические дескрипторы управляются объектами, которые разрушаются, когда main выходит за пределы области видимости.

2
ответ дан 17 December 2019 в 00:13
поделиться

Я думаю, что atExit не следует использовать. Вы должны следовать принципу RAII обертывания инициализации и уничтожения библиотеки сокетов в классе.

1
ответ дан 17 December 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: