![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Вызов этой функции также завершает поток:
BOOL TerminateThread (HANDLE hThread, DWORD dwExitCode);
В параметр dwExitCode помещается код завершения потока. После того как поток будет уничтожен, счетчик пользователей его объекта ядра "поток” уменьшится.
Если завершается процесс:
Функции ExitProcess и TerminateProcess принудительно завершают потоки, принадлежащие завершаемому процессу.
Эти функции прекращают выполнение всех потоков, принадлежавших завершенному процессу. При этом гарантируется высвобождение любых выделенных процессу ресурсов, в том числе стеков потоков. Однако эти две функции уничтожают потоки принудительно так, будто для каждого из них вызывается функция TerminateThread. А это означает, что очистка проводится некорректно, деструкторы С++-объектов не вызываются, данные на диск не сбрасываются и т. д.
Действия при завершении потока
· Освобождаются все описатели User-объектов, принадлежавших потоку.
· Код завершения потока меняется со STILL_ACTIVE на код, переданный в функцию ExitThread или TerminateThread.
· Объект ядра "поток" переводится в свободное состояние.
· Если данный поток является последним активным потоком в процессе, завершается и сам процесс.
· Счетчик пользователей объекта ядра "поток" уменьшается на 1.
· BOOL GetExitCodeThread(HANDLE hThread, PDWORD pdwExitCode);
Управление динамическими приоритетами потока:
BOOL SetThreadPriorityBoost (
HANDLE hThread, // дескриптор потока
BOOL DisablePriorityBoost // состояние форсирования приоритета
);
BOOL GetThreadPriorityBoost (
HANDLE hThread, // дескриптор потока
PBOOL pDisablePriorityBoost // состояние форсажа //приоритета
);
Поток должен иметь право доступа THREAD_SET_INFORMATION.
Управление потоками:
Флаг CREATE_SUSPENDED
Если поток создан с флагом CREATE_SUSPENDED, то после своего создания он остается в приостановленном состоянии. Вы можете настроить некоторые его свойства (например, приоритет, о котором мы поговорим позже). Закончив настройку, Вы должны разрешить выполнение потока. Для этого вызовите ResumeThread и пере дайте описатель потока, возвращенный функцией CreateThread.
DWORD ResumeThread(HANDLE hThread);
Выполнение потока можно приостановить не только при его создании с флагом CREATE_SUSPENDED, но и вызовом SuspendThread. Выполнение отдельного потока можно приостанавливать несколько раз. Если поток приостановлен 3 раза, то и возобновлен он должен быть тоже 3 раза — лишь тогда система выделит ему процессорное время.
DWORD SuspendThread(HANDLE hThread);
Дата публикования: 2014-11-19; Прочитано: 860 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!