Составители:
Рубрика:
С помощью функции ExitThread() поток может остановить себя самостоя-
тельно в том месте программы, где это необходимо. Кроме того, один поток
способен по своему усмотрению мгновенно остановить другой поток:
// с помощью вызова этой функции один поток может остановить другой
BOOL TerminateThread ( HANDLE hThread, DWORD dwExitCode ).
Поток не в состоянии защитить себя от прерывания. Имея соответствующий
дескриптор, любой объект может мгновенно остановить поток вне зависимости
от его текущего состояния (конечно, в том случае, если дескриптор разрешает
полный доступ к потоку). Если при вызове функции CreateThread() использовать
набор атрибутов безопасности, заданный по умолчанию, то результирующий де-
скриптор обеспечит полные привилегии доступа к созданному потоку.
Функция TerminateThread() не уничтожает стек потока, а только возвращает
код его завершения. Функции ExitThread() и TerminateThread() переводят объект в
сигнальное состояние, что служит признаком возможности запуска других пото-
ков, ожидавших его завершения. После выполнения любой из двух указанных
функций поток продолжает существовать в сигнальном состоянии до тех пор, пока
не будут закрыты все его дескрипторы.
2.4. Синхронизация потоков
2.4.1. Общие положения
При работе с потоками необходимо иметь возможность координировать
их действия. Часто координация действий подразумевает определенный поря-
док выполнения операций. Кроме функций, предназначенных для создания по-
токов и изменения их планового приоритета, Win32 API содержит функции,
которые переводят потоки в режим ожидания сигналов от определенных объ-
ектов, например от файлов или процессов. Кроме того, эти функции обеспечи-
вают поддержку некоторых специальных объектов, в частности семафоров и
исключающих семафоров.
Лучше всего проиллюстрировать применение синхронизирующих объек-
тов можно на примере функций, ожидающих сигнала от объекта.
С помощью одного набора обобщенных команд можно организовать ожидание
сигналов от процессов, семафоров, исключающих семафоров, событий и неко-
торых других объектов. Следующая функция ожидает поступления сигнала от
указанного объекта:
DWORD WaitForSingleObject( HANDLE hObject, // объект, сигнал от
// которого ожидается
DWORD dwMilliseconds, // максимальное время ожидания);…
Функция WaitForSingleObject() позволяет приостановить выполнение потока
до тех пор, пока не поступит сигнал от заданного объекта. Кроме того, в этой ко-
28
С помощью функции ExitThread() поток может остановить себя самостоя- тельно в том месте программы, где это необходимо. Кроме того, один поток способен по своему усмотрению мгновенно остановить другой поток: // с помощью вызова этой функции один поток может остановить другой BOOL TerminateThread ( HANDLE hThread, DWORD dwExitCode ). Поток не в состоянии защитить себя от прерывания. Имея соответствующий дескриптор, любой объект может мгновенно остановить поток вне зависимости от его текущего состояния (конечно, в том случае, если дескриптор разрешает полный доступ к потоку). Если при вызове функции CreateThread() использовать набор атрибутов безопасности, заданный по умолчанию, то результирующий де- скриптор обеспечит полные привилегии доступа к созданному потоку. Функция TerminateThread() не уничтожает стек потока, а только возвращает код его завершения. Функции ExitThread() и TerminateThread() переводят объект в сигнальное состояние, что служит признаком возможности запуска других пото- ков, ожидавших его завершения. После выполнения любой из двух указанных функций поток продолжает существовать в сигнальном состоянии до тех пор, пока не будут закрыты все его дескрипторы. 2.4. Синхронизация потоков 2.4.1. Общие положения При работе с потоками необходимо иметь возможность координировать их действия. Часто координация действий подразумевает определенный поря- док выполнения операций. Кроме функций, предназначенных для создания по- токов и изменения их планового приоритета, Win32 API содержит функции, которые переводят потоки в режим ожидания сигналов от определенных объ- ектов, например от файлов или процессов. Кроме того, эти функции обеспечи- вают поддержку некоторых специальных объектов, в частности семафоров и исключающих семафоров. Лучше всего проиллюстрировать применение синхронизирующих объек- тов можно на примере функций, ожидающих сигнала от объекта. С помощью одного набора обобщенных команд можно организовать ожидание сигналов от процессов, семафоров, исключающих семафоров, событий и неко- торых других объектов. Следующая функция ожидает поступления сигнала от указанного объекта: DWORD WaitForSingleObject( HANDLE hObject, // объект, сигнал от // которого ожидается DWORD dwMilliseconds, // максимальное время ожидания);… Функция WaitForSingleObject() позволяет приостановить выполнение потока до тех пор, пока не поступит сигнал от заданного объекта. Кроме того, в этой ко- 28
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »