Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 2.doc
Скачиваний:
18
Добавлен:
13.02.2015
Размер:
1.23 Mб
Скачать
  1. Приостановка потока

Функция SuspendThread приостанавливает работу заданного потока.

Синтаксис

DWORD SuspendThread(

HANDLE hThread // дескриптор потока

);

Параметры

hThread – дескриптор потока, работа которого приостанавливается. В Windows NT/2000/XP дескриптор должен иметь право доступа THREAD_SUSPEND_RESUME.

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - счет времени предыдущей приостановки работы потока; иначе, оно равно -1. Чтобы получать дополнительные информацию об ошибке необходимо вызвать функцию GetLastError.

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

Эта функция, прежде всего, разработана для использования отладчиками. Она не предназначена использоваться для синхронизации потока. Вызов функции SuspendThread потоком, который имеет объект синхронизации, типа мьютекса (флажка блокировки) или критической секции, может привести к тупиковой ситуации, если вызывающий поток пробует получить объект синхронизации, принадлежащий приостановленному потоку. Чтобы избежать этой ситуации, поток в пределах прикладной программы, которое не является отладчиком, должен подать сигнал другому потоку, что приостановил себя. Целевой поток должен быть разработан, чтобы наблюдать за этим сигналом и соответственно реагировать.

Каждый поток имеет счет времени приостановки работы (с максимальным значением MAXIMUM_SUSPEND_COUNT). Если счет времени приостановки больше чем нуль, поток приостанавливается; иначе, поток не приостанавливается и имеет право на исполнение кода. Вызов функции SuspendThread заставляет увеличить счет времени приостановки намеченного потока. Попытка увеличить его за пределы максимального счета времени приостановки вызывает ошибку без увеличения счета.

  1. Возобновление потока

Функция ResumeThread уменьшает счет времени приостановки работы потока. Когда счет времени приостановки работы уменьшается до нуля, выполнение потока продолжается.

Синтаксис

DWORD ResumeThread(

HANDLE hThread // дескриптор потока

);

Параметры

hThread – дескриптор для потока, который будет перезагружен. В Windows NT/2000/XP дескриптор должен иметь право доступа THREAD_SUSPEND_RESUME.

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - предшествующий счет времени приостановки работы потока.

Если функция завершается с ошибкой, величина возвращаемого значения равна -1. Чтобы получать дополнительные информацию об ошибке необходимо вызвать функцию GetLastError.

Функция ResumeThread проверяет счет времени приостановки работы подчиненного потока. Если счет времени приостановки работы равен 0, поток в настоящее время не приостановлен. Иначе, счет времени приостановки работы подчиненного потока уменьшается. Если итоговое значение - 0, то выполнение подчиненного потока продолжается.

Если величина возвращаемого значения - ноль, заданный поток не был приостановлен. Если величина возвращаемого значения равна 1, заданный поток приостановлен, но был перезагружен. Если величина возвращаемого значения больше чем 1, заданный поток все еще приостанавливается.