Функция «Сон» и отсчет приостановки - PullRequest
0 голосов
/ 05 января 2011


Я хочу выяснить, спит или нет определенный процесс (C ++ / Windows).
Я пытаюсь использовать для этого счетчик приостановок и приостанавливаю обработку перед проверкой на
процессы профилирования.

Я делаю что-то вроде этого:

SuspendThread(threadHandle);

... Do Some Stuff ...

int suspended = ResumeThread(threadHandle);
if (suspended > 1)
    m_isSleeping = true;

По данным MSDN: http://msdn.microsoft.com/en-us/library/ms685086%28v=vs.85%29.aspx
Если процесс приостановлен, «ResumeThread» возвращает значение> 0.
В моем случае это спящий процесс, поэтому я ожидаю, что счетчик приостановок будет иметь значение [My Call To SuspendThread] + [Метод «Sleep» внутри процесса] = 2
но я продолжаю получать: ResumeThread (threadHandle) == 1

Кто-нибудь знает, почему это происходит?
спасибо:)

Ответы [ 3 ]

2 голосов
/ 05 января 2011

Поток в Sleep не приостановлен, поэтому возвращаемое значение 1

1 голос
/ 05 января 2011

Вы путаете темы и процессы.ResumeThread и SuspendThread не работают на ручках процесса , они работают на ручках thread .Кроме того, Sleep не изменяет счетчик приостановки процесса, только ResumeThread и SuspendThread изменяют это.Если вы пытаетесь определить, находится ли поток в данный момент в вызове Sleep, вы делаете это неправильно.

0 голосов
/ 05 января 2011

в дополнение к тому, что сказали другие, ваш SuspendThread вызов не гарантирует немедленного приостановления потока, он может быть запущен на некоторое время, и вы можете фактически вызвать ResumeThread, пока поток еще работает (см. Подробности: http://www.dcl.hpi.uni -potsdam.de / исследования / WRK / 2009/01 / что-делает-SuspendThread-действительно-DO / )

...