Функции управления потоками в библиотеке времени выполнения C
В любой программе Win32 используется как минимум один поток. Любой поток может создавать дополнительные потоки. Поток может завершаться после выполнения определенных действий или оставаться активным в течение всего времени существования программы.
В библиотеках времени выполнения LIBCMT и MSVCRT C предоставляются следующие функции создания и завершения потоков: _beginthread, _beginthreadex, а также _endthread, _endthreadex.
Функции _beginthread и _beginthreadex используются для создания нового потока и в случае успешного выполнения операции возвращают идентификатор потока. По завершении выполнения поток автоматически завершается. При необходимости можно завершить поток, вызвав метод _endthread или _endthreadex.
Примечание
Если в программе, построенной с использованием библиотеки Libcmt.lib, предполагается вызов процедур времени выполнения C, для создания потока следует использовать функции _beginthread или _beginthreadex.В таких случаях не следует использовать функции Win32 ExitThread и CreateThread.При использовании функции SuspendThread может возникнуть состояние взаимной блокировки, которое связано с наличием нескольких заблокированных потоков, ожидающих завершения операции обращения к структуре данных времени выполнения C со стороны приостановленного потока.
Функции _beginthread и _beginthreadex
Функции _beginthread и _beginthreadex предназначены для создания нового потока. Код и сегменты данных процесса совместно используются всеми входящими в его состав потоками, однако каждому потоку назначаются уникальные значения регистров, память в стеке и текущий адрес инструкции. Каждому потоку автоматически выделяется время ЦП, благодаря чему обеспечивается параллельное выполнение всех потоков в процессе.
Функции _beginthread и _beginthreadex схожи с функцией CreateThread интерфейса API Win32, однако имеют следующие отличия от нее:
С помощью этих функций инициализируются определенные переменные библиотеки времени выполнения C. Это важно только при использовании в потоках библиотеки времени выполнения C.
Функция CreateThread обеспечивает управление атрибутами безопасности. Эту функцию можно использовать для запуска потока в приостановленном состоянии.
Функции _beginthread и _beginthreadex возвращают дескриптор нового потока (в случае успешного выполнения) или код ошибки.
Функции _endthread и _endthreadex
Функция _endthread используется для завершения потока, созданного с помощью функции _beginthread. Функция _endthreadex используется для завершения потока, созданного с помощью функции _beginthreadex. Потоки автоматически завершаются после их выполнения. Для условного завершения потока используются функции _endthread и _endthreadex. Например, можно завершить поток, отвечающий за управление соединением, если в нем не удается получить доступ к COM-порту.
См. также
Основные понятия
Реализация многопоточности на языке C с помощью функций Win32