Поделиться через


Функции управления потоками в библиотеке времени выполнения 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