Cómo obtener el estado de un hilo
El siguiente código es un fragmento de uno de mis programas:
Por ejemplo, si quieres comprobar el estado del primer hilo de explorer.exe, puedes usarlo como esto (por supuesto, debe realizar algunos cambios usted mismo):
[cpp]Ver texto sin formato
función void()
{
initialize();
LONG rt = GetThreadState(_ T(" explorer/0 "));
Cambiar (derecha)
{ p>
Caso 0://Inicialización, el microkernel reconoce el hilo como un objeto.
Roto;
Caso 1: //Listo, el hilo está listo para ejecutarse en el siguiente procesador inactivo.
Roto;
Caso 2: //Corriendo, el hilo se está ejecutando.
Roto;
Caso 3: //En espera, el hilo está asignado a un procesador y está a punto de ejecutarse. Sólo un hilo puede estar en estado de espera a la vez.
Pausa;
El caso 4:// finaliza y se completa la ejecución del hilo.
Roto;
Caso 5: //Esperando, el hilo no está listo para el procesador. Cuando esté listo, habrá que reprogramarlo.
Roto;
Caso 6: //Transición, el hilo está listo, pero está esperando que otros recursos además del procesador estén disponibles.
Roto;
Caso 7: //desconocido, el estado del hilo es desconocido.
Interrupción;
Valor predeterminado:
Interrupción;
}
}
BOOL CPdhWrapper::Initialize()
{
typedef long(_ _ stdcall * PDHOpenQuery)(LPCSTR, DWORD_PTR, HQUERY);
PDHOpenQuery pfnPdhOpenQuery
m _ hPdhModule = LoadLibrary(_ T(" PDH.DLL "));
if(m_hPdhModule == NULL)
Devuelve FALSO
//La Sra. pdh confundió este lugar. La declaración era PDHOPENQUERYA, pero PdhOpenQueryA se exportó desde pdh.h.
pfnPdhOpenQuery =(PDHOpenQuery)GetProcAddress(m_hPdhModule, "PDHOpenQuery");
if(pfnPdhOpenQuery == NULL)
Devuelve FALSO
return ERROR _ SUCCESS == pfnPdhOpenQuery(NULL, 1; m _ hQuery);
}
LONG CPdhWrapper::query data(LPCTSTR lpCounterName)
{
HCOUNTER hCounter
PDH_FMT_inverse pdhFormattedValue
if(ERROR_SUCCESS!= PdhAddCounter(m_hQuery, lpCounterName, NULL y amphCounter))
return-1;
if(ERROR_SUCCESS!= PdhCollectQueryData(m_hQuery)
||ERROR_SUCCESS!= PdhGetFormattedCounterValue(
hCounter,
PDH_FMT_DRAGON
NULL,
&pdhFormattedValue)
||ERROR_Success! = pdhFormattedValue )
{
pdhformattedvalue. valor largo =-1;
}
PdhRemoveCounter(h contador);
Devuelve pdhFormattedValue.longValue
}
DWORD CPdhWrapper::GetThreadStat(LPCTSTR SZ nombre de hilo)
{
Nombre del contador TCHAR SZ [256];
_stprintf(szCounterName, _T( "//Thread(%s)//Thread State "), nombre del hilo SZ);
Devolver datos de la consulta (nombre del contador SZ);
}