Должен ли я использовать ExitThread() или Возврат из потоков в C

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