Функции создания потока и его завершения


Для создания потокаможно использовать функцию из стандартной библиотеки языка С, определенную в файле process.h следующим образом и возвращающую дескриптор созданного потока:

unsigned long _beginthread( void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist );
  • Через первый параметр start_address функции _beginthread передается адрес функции потока. После вызова функции _beginthread код функции потока, так же как и код любой другой функции, которая может быть вызвана из этой функции потока, выполняется одновременно с оставшимся кодом программы.
  • Последний параметр arglist функции _beginthread позволяет потоку, который создает этой функцией другой поток, передавать информацию этому потоку в виде 32-разрядной переменной. Обычно эта переменная является указателем на блок памяти (например, на структуру данных). Это дает возможность создающему и создаваемому потокам совместно владеть информацией без использования глобальных переменных (общая память потоков).
  • Второй параметр stack_size функции _beginthread служит для задания размера стека для потока. Если через этот параметр передать нулевое значение, то операционная система полагает размер стека для потока равным размеру стека главного потока.

Замечание.Два и более потока могут использовать одну и ту же функцию процесса. В этом случае автоматические переменные функции потока (хранящиеся в стеке) уникальны для каждого потока, все статические переменные этой функции потока являются общими для всех потоков, использующих эту функцию.

Завершение работы потока происходит при вызове функций:

void _endthread( void );

· Но вызов этой функций не является строго необходимым, поскольку поток автоматически уничтожается при выходе из функции потока (при завершении ее выполнения), а также при завершении работы всего приложения. Однако функция _endthread является полезной при выходе из потока, находящегося глубоко в иерархии потоков обработки.

Для создания потока можно использовать и функцию стандартной библиотеки языка С _beginthreadex.С ее помощью можно задавать более разнообразные параметры создаваемого потока. Закрывать же поток, созданный этой функцией, следует при помощи функции _endthreadex.

Кроме рассматриваемых выше функций библиотеки С для работы с потоками можно использовать и функции WinApi 32:CreateRemoteThread, CreateThread, ExitThread, GetExitCodeThread, GetThreadPriority, ResumeThread, SetThreadPriority, CreateProcess.



Дата добавления: 2017-01-26; просмотров: 1540;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.006 сек.