Функции создания потока и его завершения
Для создания потокаможно использовать функцию из стандартной библиотеки языка С, определенную в файле 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; просмотров: 1629;