Определение количества приостановок (suspend) потока



Автор: Эдгар
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Определение количества приостановок (suspend) потока
Зависимости: НЕТУ
Автор:       Эдгар, [email protected], Berlin
Copyright:   Copyright DPRSystem 1999-2004 by x-ssg
Дата:        29 февраля 2004 г.
***************************************************** }
function NtSuspendThread(ThreadHandle, PreviousSuspendCount: DWORD): DWORD;
stdcall external 'NTDLL.DLL';
function NtResumeThread(ThreadHandle, SuspendCount: DWORD): DWORD; stdcall
external 'NTDLL.DLL';
.....
function GetSuspendCount(Thread: DWORD): DWORD;
var
tmp: ^DWORD;
begin
Result := 0;
if GetCurrentThread <> Thread then
begin // Если в параметре наш поток то тогда возвращает 0, то есть поток работает
if NtSuspendThread(Thread, dword(@tmp)) <> 0 then
Result := Dword(-1)
else // Останавливаем поток. И сохраняем значение PreviousSuspendCount в Result
Result := dword(tmp);
NtResumeThread(Thread, dword(@tmp)); // Возобновляем работу потока
end;
end;
// В результате находится количество "остановок" потока.
// Если результат 0 - то значит поток работает!

Далее: Особенности разработки потоков »»