Составители:
Рубрика:
ный интервал времени. Интерактивные потоки, которые выводят определен-
ную информацию для пользователя, часто делают короткие паузы, чтобы дать
ему время для ознакомления с результатами. Применения режима ожидания
предпочтительнее задействования «пустого» цикла, поскольку в этом случае
не используется время центрального процессора.
Для осуществления паузы в течение заданного времени поток вызывает
следующие функции:
VOID Sleep (DWORD dwMilliseconds);
DWORD SleepEx(DWORD dwMilliseconds, // продолжительность паузы
BOOL bAlertable);…
Расширенная функция SleepEx() обычно работает совместно с функциями
фонового ввода/вывода и может использоваться для инициации команд чтения
или записи, не требуя их завершения. Эти операции выполняются в фоновом
режиме. По завершении операции система извещает об этом пользователя, об-
ращаясь к предусмотренной в программе процедуре обратного вызова. Фоно-
вый ввод/вывод (который иногда называют перекрывающимся вво-
дом/выводом) чаще всего применяется в интерактивных программах, которые
должны реагировать на команды пользователя, не прерывая работы со сравни-
тельно медленными устройствами, например с накопителем на магнитной лен-
те или с сетевым диском.
Параметр bAlertable функции SleepEx() имеет тип Boolean. Если этот пара-
метр равен TRUE, система может преждевременно возобновить выполнение по-
тока при условии, что перекрывающаяся операция ввода/вывода завершилась до
истечения заданного времени ожидания. В случае досрочного прерывания функ-
ция SleepEx() возвращает значение WAIT_IO_COMPLETION,
по истечении ука-
занного времени – значение 0.
2.3.3. Получение информации о существующих потоках
По специальному запросу поток возвращает свои дескриптор и иденти-
фикатор. Указанные ниже функции позволяют получить информацию о теку-
щем потоке:
DWORD GetCurrentThreadId(VOID) ;
HANDLE GetCurrentThread(VOID);…
Результирующее значение функции GetCurrentThreadId() совпадает со
значением параметра lpIDThread после выполнения функции CreateThread() и
однозначно идентифицирует поток в системе. Хотя идентификатор потока ну-
жен лишь для незначительного количества функций Win32 API, он может ис-
пользоваться с целью мониторинга системных потоков без необходимости
поддерживать открытый дескриптор для каждого потока. Открытый дескрип-
тор защищает поток от уничтожения.
25
ный интервал времени. Интерактивные потоки, которые выводят определен- ную информацию для пользователя, часто делают короткие паузы, чтобы дать ему время для ознакомления с результатами. Применения режима ожидания предпочтительнее задействования «пустого» цикла, поскольку в этом случае не используется время центрального процессора. Для осуществления паузы в течение заданного времени поток вызывает следующие функции: VOID Sleep (DWORD dwMilliseconds); DWORD SleepEx(DWORD dwMilliseconds, // продолжительность паузы BOOL bAlertable);… Расширенная функция SleepEx() обычно работает совместно с функциями фонового ввода/вывода и может использоваться для инициации команд чтения или записи, не требуя их завершения. Эти операции выполняются в фоновом режиме. По завершении операции система извещает об этом пользователя, об- ращаясь к предусмотренной в программе процедуре обратного вызова. Фоно- вый ввод/вывод (который иногда называют перекрывающимся вво- дом/выводом) чаще всего применяется в интерактивных программах, которые должны реагировать на команды пользователя, не прерывая работы со сравни- тельно медленными устройствами, например с накопителем на магнитной лен- те или с сетевым диском. Параметр bAlertable функции SleepEx() имеет тип Boolean. Если этот пара- метр равен TRUE, система может преждевременно возобновить выполнение по- тока при условии, что перекрывающаяся операция ввода/вывода завершилась до истечения заданного времени ожидания. В случае досрочного прерывания функ- ция SleepEx() возвращает значение WAIT_IO_COMPLETION, по истечении ука- занного времени – значение 0. 2.3.3. Получение информации о существующих потоках По специальному запросу поток возвращает свои дескриптор и иденти- фикатор. Указанные ниже функции позволяют получить информацию о теку- щем потоке: DWORD GetCurrentThreadId(VOID) ; HANDLE GetCurrentThread(VOID);… Результирующее значение функции GetCurrentThreadId() совпадает со значением параметра lpIDThread после выполнения функции CreateThread() и однозначно идентифицирует поток в системе. Хотя идентификатор потока ну- жен лишь для незначительного количества функций Win32 API, он может ис- пользоваться с целью мониторинга системных потоков без необходимости поддерживать открытый дескриптор для каждого потока. Открытый дескрип- тор защищает поток от уничтожения. 25
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »