Приостановка исполнения потока


Поток может приостанавливать работу и восстанавливать исполнение другого потока, используя функции SuspendThread и ResumeThread. В то время когда поток приостановлен, он в течение этого периода не допускается к работе на процессоре.

Функция SuspendThread не особенно полезна для синхронизации, потому что она не управляет точкой в коде, в которой было приостановлено выполнение потока. Однако у Вас может возникнуть желание приостановить работу потока в ситуации, когда ожидается ввод данных от пользователя, который может отменить работу выполняемого потока. Если пользователь вводит данные, отменяющие работу, поток исчезает; иначе, вызывается ResumeThread.

Если поток создан в состоянии ожидания (с флажком CREATE_SUSPENDED), он не начинает выполняться до тех пор, пока другой поток не вызывает функцию ResumeThread с дескриптором приостановленного потока. Это может быть полезно для инициализации состояния потока до того, как он начнет выполняться. Создание приостановленного потока может быть полезна для одноразовой синхронизации, потому что этот прием гарантирует то, что приостановленный поток исполнит стартовую команду своего кода, когда Вы вызовете функцию ResumeThread.

Поток может временно передать свое исполнение кода на заданный интервал времени путем вызова функции Sleep или SleepEx. Это является полезным особенно в случаях, где поток отвечает за взаимодействие с пользователем, так как он может задерживать исполнение кода достаточно долго, чтобы дать возможность пользователям наблюдать, что происходит в результате его действий. В течение интервала бездействия, поток на это время не ставится в очередь для работы на процессоре.

Функция SwitchToThread аналогична функциям Sleep и SleepEx, за исключением того, что Вы не можете определять интервал бездействия. Функция SwitchToThread позволяет потоку уступить свой квант машинного времени.

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz