Составители:
Расширенная функция SleepEx обычно работает совместно с функциями фонового
ввода/вывода и может использоваться для инициации команд чтения или записи, не тре-
буя их завершения. Эти операции выполняются в фоновом режиме. По завершении опе-
рации система извещает об этом пользователя, обращаясь к предусмотренной в про-
грамме процедуре обратного вызова. Фоновый ввод/вывод (или перекрывающийся
ввод/вывод далее будет рассмотрен более подробно) чаще всего применяется в интерак-
тивных программах, которые должны реагировать на команды пользователя, не преры-
вая работы со сравнительно медленными устройствами, например с накопителем на
магнитной ленте или с сетевым диском.
Параметр bAlertable функции SleepEx имеет тип Boolean. Если этот параметр равен
TRUE, система может преждевременно возобновить выполнение потока при условии,
что перекрывающаяся операция ввода/вывода завершилась до истечения заданного вре-
мени ожидания. В случае досрочного прерывания функция sleepEx возвращает значение
WAIT_IO_COMPLETION, по истечении указанного времени - значение 0.
По специальному запросу поток возвращает свои дескриптор и идентификатор.
Указанные ниже функции позволяют получить информацию о текущем потоке:
DWORD GetCurrentThreadId( VOID ) ;
HANDLE GetCurrentThread( VOID );
Результирующее значение функции GetCurrentThreadId совпадает со значением па-
раметра lpIDThread после выполнения функции CreateThread и однозначно идентифици-
рует поток в системе. Хотя идентификатор потока нужен лишь для незначительного ко-
личества функций Win32 API, он может использоваться с целью мониторинга
системных потоков без необходимости поддерживать открытый дескриптор для каждого
потока. Открытый дескриптор защищает поток от уничтожения.
Дескриптор, полученный в результате выполнения функции GetCurrentThread,
служит для тех же целей, что и дескриптор, возвращенный функцией CreateThread. И
несмотря на то, что он может использоваться аналогично другим дескрипторам, на са-
мом деле этот параметр является псевдодескриптором. Псевдодескриптор - это специ-
альная константа, которая всегда интерпретируется системой особым образом, подобно
тому, как одиночная точка (.) в DOS всегда указывает на текущий каталог, а параметр
this в C++ определяет текущий объект. Константа - псевдодескриптор, полученная в ре-
зультате выполнения функции GetCurrentThread, указывает на текущий поток. В отличие
от настоящих дескрипторов, псевдодескриптор не может передаваться другим потокам.
Чтобы получить настоящий переносимый дескриптор потока, необходимо выполнить
следующие действия:
HANDLE hThread;
hThread = DuplicateHandle(
GetCurrentProcess(), // процесс-источник
GetCurrentThread(), // исходный дескриптор
GetCurrentProcess(), // целевой процесс
&hThread, // новый дублирующийся дескриптор
0, //привилегии доступа (подавляемые
// последним параметром)
FALSE, // дочерние объекты не унаследуют
// дескриптор
DUPLICATE_SAME_ACCESS ); // привилегии доступа копируются у
// исходного дескриптора
68
Расширенная функция SleepEx обычно работает совместно с функциями фонового
ввода/вывода и может использоваться для инициации команд чтения или записи, не тре-
буя их завершения. Эти операции выполняются в фоновом режиме. По завершении опе-
рации система извещает об этом пользователя, обращаясь к предусмотренной в про-
грамме процедуре обратного вызова. Фоновый ввод/вывод (или перекрывающийся
ввод/вывод далее будет рассмотрен более подробно) чаще всего применяется в интерак-
тивных программах, которые должны реагировать на команды пользователя, не преры-
вая работы со сравнительно медленными устройствами, например с накопителем на
магнитной ленте или с сетевым диском.
Параметр bAlertable функции SleepEx имеет тип Boolean. Если этот параметр равен
TRUE, система может преждевременно возобновить выполнение потока при условии,
что перекрывающаяся операция ввода/вывода завершилась до истечения заданного вре-
мени ожидания. В случае досрочного прерывания функция sleepEx возвращает значение
WAIT_IO_COMPLETION, по истечении указанного времени - значение 0.
По специальному запросу поток возвращает свои дескриптор и идентификатор.
Указанные ниже функции позволяют получить информацию о текущем потоке:
DWORD GetCurrentThreadId( VOID ) ;
HANDLE GetCurrentThread( VOID );
Результирующее значение функции GetCurrentThreadId совпадает со значением па-
раметра lpIDThread после выполнения функции CreateThread и однозначно идентифици-
рует поток в системе. Хотя идентификатор потока нужен лишь для незначительного ко-
личества функций Win32 API, он может использоваться с целью мониторинга
системных потоков без необходимости поддерживать открытый дескриптор для каждого
потока. Открытый дескриптор защищает поток от уничтожения.
Дескриптор, полученный в результате выполнения функции GetCurrentThread,
служит для тех же целей, что и дескриптор, возвращенный функцией CreateThread. И
несмотря на то, что он может использоваться аналогично другим дескрипторам, на са-
мом деле этот параметр является псевдодескриптором. Псевдодескриптор - это специ-
альная константа, которая всегда интерпретируется системой особым образом, подобно
тому, как одиночная точка (.) в DOS всегда указывает на текущий каталог, а параметр
this в C++ определяет текущий объект. Константа - псевдодескриптор, полученная в ре-
зультате выполнения функции GetCurrentThread, указывает на текущий поток. В отличие
от настоящих дескрипторов, псевдодескриптор не может передаваться другим потокам.
Чтобы получить настоящий переносимый дескриптор потока, необходимо выполнить
следующие действия:
HANDLE hThread;
hThread = DuplicateHandle(
GetCurrentProcess(), // процесс-источник
GetCurrentThread(), // исходный дескриптор
GetCurrentProcess(), // целевой процесс
&hThread, // новый дублирующийся дескриптор
0, //привилегии доступа (подавляемые
// последним параметром)
FALSE, // дочерние объекты не унаследуют
// дескриптор
DUPLICATE_SAME_ACCESS ); // привилегии доступа копируются у
// исходного дескриптора
68
Страницы
- « первая
- ‹ предыдущая
- …
- 64
- 65
- 66
- 67
- 68
- …
- следующая ›
- последняя »
