Основы программирования в Win32API. Марапулец Ю.В. - 28 стр.

UptoLike

Составители: 

С помощью функции 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