Операционные системы. Программирование в операционной среде Windows

24 typedef unsigned ( stdcall *PTHREAD_START) (void *); #define chBEGINTHREADEX(psa, cbStack, pfnStartAddr, pvParam, fdwCreate, pdwThreadID) ((HANDLE) _beginthreadex( (void *) (psa) , (unsigned) (cbStack), (PTHREAD_START) (pfnStartAddr), (void *) (pvParam) , (unsigned) (fdwCreate), (unsigned *) (pdwThreadID))) Функция beginthreadex, как и CreateThread, возвращает описатель созданного потока. 2.3. Завершение потока Поток рекомендуется завершить возвратом управления из функции потока. Это единственный способ, гарантирующий корректную очистку всех ресурсов, принадлежавших потоку. Функция потока может выполнять любые задачи, при завершении работы она вернет управление. При завершении потока происходит следующее: - освобождается память, отведенная под стек потока; - счетчик пользователей ОЯ «поток» уменьшается на 1,когда счетчик обнулится, ОЯ будет разрушен; - функция потока возвращает значение, которое будет использоваться как код завершения потока. Код завершения первичного потока становится кодом завершения процесса. Возможны другие способы завершения потока (но они не желательны): - поток самоуничтожается вызовом функции ExitThread; - один из потоков данного или другого процесса вызывает функцию TerminateThread: BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode); - завершается процесс, содержащий данный поток. 2.4. Приостановка и возобновление потоков В ОЯ «поток» имеется переменная — счетчик числа простоев данного потока. При вызове CreateProcess или CreateThread он инициализируется значением, равным единице, которое запрещает системе выделять новому потоку процессорное время, потому что сразу после создания поток не готов к выполнению, ему нужно время для инициализации. После того как поток инициализирован, функция CreateProcess или CreateThread проверяет, не передан ли ей флаг CREATE SUSPENDED. Если флаг установлен, то функция возвращает управление, оставив поток в приостановленном состоянии. Иначе счетчик простоев обнуляется, и поток

RkJQdWJsaXNoZXIy MTY0OTYy