Как читать System.Threading.Thread.ThreadState по профилированию API (ICofProfilerInfo или любой IMetadataImport или любой другой) - PullRequest
2 голосов
/ 26 ноября 2011

Есть ли способ прочитать свойство System.Thread.ThreadState управляемого потока с помощью интерфейса Profiling API ICofProfilerInfo или IMetadataImport или любым другим способом из неуправляемого кода?

Например, что-то вроде этого:

ICorProfilerInfo3 pProfilerInfo = ...;
ThreadID threadId;
pProfilerInfo->GetCurrentThreadID(&threadId);
ThreadState threadState;
pSomethingWhatINeed->GetManagedTheadState(threadId, &threadState);
if(threadState == THREADSTATE_WAIT_JOIN_SLEEP){
  //do something
}

1 Ответ

3 голосов
/ 26 ноября 2011

Вы можете использовать ICorDebug.GetProcess для получения ICorDebugProcess, из которого вы можете получить ICorDebugThread, позвонив GetThread.Затем вызовите GetUserState, чтобы получить CorDebugUserState .Однако будьте осторожны, при использовании отладчика ICorDebug и debugee должны быть разные процессы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...