Операционные системы. Учебное пособие. Марапулец Ю.В. - 65 стр.

UptoLike

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

THREAD_PRIORITY_LOWEST На два уровня ниже приоритета процес-
са
THREAD_PRIORITY_BELOW_NORMAL На один уровень ниже приоритета про-
цесса
THREAD_PRIORITY_NORMAL Тот же уровень приоритета, что и у про-
цесса
THREAD_PRIORITY_ABOVE_NORMAL На один уровень выше приоритета про-
цесса
THREAD_PRIORITY_HIGHEST На два уровня выше приоритета процес-
са
THREAD_PRIORITY_TIME_CRITICAL Уровень 15 (для обычных пользователь-
ских процессов)
THREAD_PRIORITY_IDLE Уровень 1 (для обычных пользователь-
ских процессов)
Прерванный поток приостанавливает свое выполнение и не учитывается при рас-
пределении времени центрального процессора. Поток остается в таком состоянии до тех
пор, пока другой поток не возобновит его выполнение. Остановку потока можно произ-
вести, в частности, в том случае, если пользователь прерывает выполнение определен-
ной задачи. До тех пор, пока задание не будет отменено, поток можно перевести в со-
стояние ожидания. Если пользователь решит продолжить работу, поток возобновит
выполнение с той точки, где он был остановлен. Для приостановки и возобновления вы-
полнения потоков служат функции
DWORD SuspendThread ( HANDLE hThread ) ;
DWORD ResumeThread( HANDLE hThread );
Один и тот же поток можно последовательно остановить несколько раз, не возоб-
новляя его выполнения, однако каждой последовательной команде SuspendThread
должна соответствовать ответная команда ResumeThread. Система отчитывает количе-
ство отмененных команд с помощью счетчика прерываний. Каждая команда Suspend-
Thread инкрементирует значения счетчика, а каждая команда ResumeThread декремен-
тирует его. Обе функции возвращают предыдущее значение счетчика в виде параметра
типа DWORD. Поток возобновит свое выполнение только в том случае, если счетчик
примет значение 0.
Поток способен остановить себя, но он не в состоянии самостоятельно возобновить
свое выполнение. Однако он может на нужное время перенести себя в режим ожидание.
Команда Sleep задерживает выполнения потока, удаляя его из очереди программы-
планировщика до тех пор, пока не пройдет заданный интервал времени. Интерактивные
потоки, которые выводят определенную информацию для пользователя, часто делают
короткие паузы, чтобы дать ему время для ознакомления с результатами. Применения
режима ожидания предпочтительнее задействования "пустого" цикла, поскольку в этом
случае не используется время центрального процессора.
Для осуществления паузы в течение заданного времени поток вызывает следую-
щие функции:
VOID Sleep ( DWORD dwMilliseconds ) ;
DWORD SleepEx(DWORD dwMilliseconds, // продолжительность паузы
BOOL bAlertable ); // TRUE - возобновить работу
// при завершении операции ввода/вывода
67
THREAD_PRIORITY_LOWEST                        На два уровня ниже приоритета процес-
са
THREAD_PRIORITY_BELOW_NORMAL                  На один уровень ниже приоритета про-
цесса
THREAD_PRIORITY_NORMAL                        Тот же уровень приоритета, что и у про-
цесса
THREAD_PRIORITY_ABOVE_NORMAL                  На один уровень выше приоритета про-
цесса
THREAD_PRIORITY_HIGHEST                       На два уровня выше приоритета процес-
са
THREAD_PRIORITY_TIME_CRITICAL                 Уровень 15 (для обычных пользователь-
ских процессов)
THREAD_PRIORITY_IDLE                          Уровень 1 (для обычных пользователь-
ских процессов)

     Прерванный поток приостанавливает свое выполнение и не учитывается при рас-
пределении времени центрального процессора. Поток остается в таком состоянии до тех
пор, пока другой поток не возобновит его выполнение. Остановку потока можно произ-
вести, в частности, в том случае, если пользователь прерывает выполнение определен-
ной задачи. До тех пор, пока задание не будет отменено, поток можно перевести в со-
стояние ожидания. Если пользователь решит продолжить работу, поток возобновит
выполнение с той точки, где он был остановлен. Для приостановки и возобновления вы-
полнения потоков служат функции

DWORD SuspendThread ( HANDLE hThread ) ;
DWORD ResumeThread( HANDLE hThread );

     Один и тот же поток можно последовательно остановить несколько раз, не возоб-
новляя его выполнения, однако каждой последовательной команде SuspendThread
должна соответствовать ответная команда ResumeThread. Система отчитывает количе-
ство отмененных команд с помощью счетчика прерываний. Каждая команда Suspend-
Thread инкрементирует значения счетчика, а каждая команда ResumeThread декремен-
тирует его. Обе функции возвращают предыдущее значение счетчика в виде параметра
типа DWORD. Поток возобновит свое выполнение только в том случае, если счетчик
примет значение 0.
     Поток способен остановить себя, но он не в состоянии самостоятельно возобновить
свое выполнение. Однако он может на нужное время перенести себя в режим ожидание.
Команда Sleep задерживает выполнения потока, удаляя его из очереди программы-
планировщика до тех пор, пока не пройдет заданный интервал времени. Интерактивные
потоки, которые выводят определенную информацию для пользователя, часто делают
короткие паузы, чтобы дать ему время для ознакомления с результатами. Применения
режима ожидания предпочтительнее задействования "пустого" цикла, поскольку в этом
случае не используется время центрального процессора.
     Для осуществления паузы в течение заданного времени поток вызывает следую-
щие функции:

VOID Sleep ( DWORD dwMilliseconds ) ;
DWORD SleepEx(DWORD dwMilliseconds,                 // продолжительность паузы
                 BOOL bAlertable );                 // TRUE - возобновить работу
                                      // при завершении операции ввода/вывода



                                         67