#c #multithreading #winsock2
Вопрос:
Я разрабатываю серверное приложение, к которому будут подключаться несколько клиентов. Для каждого нового клиента я создаю новый поток и хочу освободить все ресурсы каждого клиента, как только клиент отключится.
Моему основному потоку не нужны возвращаемые значения от клиента(ов), поэтому я просто хочу безопасно завершить потоки и освободить ресурсы, используемые/в потоке.
Что я должен использовать в этом случае и почему ?
Комментарии:
1. Вы должны использовать
return
, чтобы библиотека C могла вызывать все соответствующие деструкторы.2. Как вы создали эту тему ?
3. @RichardCritten Не имеет никакого значения, как был создан поток. Если в стеке есть объекты, они будут уничтожены только в том случае, если C знает о выходе.
4. @user207421 иногда вызовы API запуска и завершения потока должны совпадать (очевидно, для конкретной платформы).
5.
ExitThread
не является частью стандартного C . Если вы пишете переносимый код (а так и должно быть), используйтеreturn
.
Ответ №1:
Это отвечает на ваш вопрос? Иногда очень полезно прочитать ссылку:
Замечания
ExitThread-это предпочтительный метод выхода из потока в коде на языке Си. Однако в коде C поток завершается до того, как могут быть вызваны какие-либо деструкторы или может быть выполнена любая другая автоматическая очистка. Поэтому в коде C вы должны возвращать данные из своей функции потока.
Комментарии:
1. ВГ но мне любопытно, почему
ExitThread()
когда-либо предпочтение отдавалось в С.2. @user207421 Хороший вопрос, единственная причина, о которой я могу подумать, — это «завершить» поток из любой функции за пределами функции запуска потока, где возврат будет просто возвращен из этой конкретной функции, а не завершать поток.
3. Спасибо Эрдалу , я действительно прочитал ссылку, но не был уверен, следует ли мне использовать return, потому что мне не нужно возвращать что-то из потоков.
4. @user260854
ExitThread
позволяет возвращать код выхода из потока при сбое. Так что это может быть полезно для аномальной отдачи. Функция возврата из потока всегда возвращает код выхода 0.5. Цитата о
ExitThread
предпочтительном методе в C немного вводит в заблуждение, поскольку она противоречит следующей информации, которая также находится на странице, на которую вы ссылаетесь: «Поток в исполняемом файле, связанный со статической библиотекой времени выполнения C (CRT), должен использовать _beginthread и _endthread для управления потоками, а не CreateThread и ExitThread. Невыполнение этого требования приводит к небольшим утечкам памяти, когда поток вызывает ExitThread.»