Quiero obtener una lista con todos los hilos (excepto el hilo principal, GUI) desde mi aplicación para poder hacer alguna acción con ellos . (establecer prioridad, matar, pausar, etc.) ¿Cómo hacer eso?¿Cómo puedo obtener una lista con todos los hilos creados por mi aplicación?
Respuesta
Usted puede usar mi clase TProcessInfo:
var
CurrentProcess : TProcessItem;
Thread : TThreadItem;
begin
CurrentProcess := ProcessInfo1.RunningProcesses.FindByID(GetCurrentProcessId);
for Thread in CurrentProcess.Threads do
Memo1.Lines.Add(Thread.ToString);
end;
También puede echar un vistazo a http://blog.delphi-jedi.net/2008/03/19/how-to-get-the-threads-of-a-process/
Puede acceder a esta información a través de WMI .
El WIN32_Process puede darle toda la información sobre la ejecución del proceso en la máquina. Para cada proceso puede dar ThreadsCount, Handle, ...
Otra clase, WIN32_Thread puede darle información detallada sobre todos los hilos que se ejecutan en la máquina. Esta clase tiene una propiedad llamada ProcessId para buscar hilos específicos para 1 proceso (clase WIN32_Process).
Para que la prueba se puede ejecutar esta en la ventana Línea de comandos:
// all processes
WMIC PROCESS
// information about Delphi32
WMIC PROCESS WHERE Name="delphi32.exe"
// some information about Delphi32
WMIC PROCESS WHERE Name="delphi32.exe" GET Name,descrption,threadcount,Handle
(NOTE: The handle for delphi32.exe in my machine is **3680**)
similares se puede hacer con WIN32_Thread usando el mango del proceso.
Excuse.me for my bad english.
Atentamente.
Ejemplo muy simple y útil, ¡gracias! – TPAKTOPA
Otra opción es utilizar las funciones CreateToolhelp32Snapshot, Thread32First y Thread32Next.
Vea este ejemplo muy simple (Probado en Delphi 7 y Windows 7).
program ListthreadsofProcess;
{$APPTYPE CONSOLE}
uses
PsAPI,
TlHelp32,
Windows,
SysUtils;
function GetTthreadsList(PID:Cardinal): Boolean;
var
SnapProcHandle: THandle;
NextProc : Boolean;
TThreadEntry : TThreadEntry32;
begin
SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); //Takes a snapshot of the all threads
Result := (SnapProcHandle <> INVALID_HANDLE_VALUE);
if Result then
try
TThreadEntry.dwSize := SizeOf(TThreadEntry);
NextProc := Thread32First(SnapProcHandle, TThreadEntry);//get the first Thread
while NextProc do
begin
if TThreadEntry.th32OwnerProcessID = PID then //Check the owner Pid against the PID requested
begin
Writeln('Thread ID '+inttohex(TThreadEntry.th32ThreadID,8));
Writeln('base priority '+inttostr(TThreadEntry.tpBasePri));
Writeln('');
end;
NextProc := Thread32Next(SnapProcHandle, TThreadEntry);//get the Next Thread
end;
finally
CloseHandle(SnapProcHandle);//Close the Handle
end;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
GettthreadsList(GetCurrentProcessId); //get the PID of the current application
//GettthreadsList(5928);
Readln;
end.
No olvide que TThreadEntry.dwSize está ** configurado ** por Thread32First y Thread32Next, por lo que ** debe ** comprobarlo antes de acceder a otros campos. Las diferentes versiones de Windows devuelven diferentes cantidades válidas de datos. –
Si son sus hilos, entonces crearía una aplicación global Thread Manager para registrarse al momento de la creación. A continuación, puede supervisar, detener y detener adecuadamente los hilos de forma correcta con su Thread Manager.
- 1. Cómo anular los hilos creados con ThreadPool.QueueUserWorkItem
- 2. ¿Puedo obtener los rastros de la pila de todos los hilos en mi aplicación C#?
- 3. ¿Cómo puedo obtener una lista de todos los controladores de kernel activos en mi sistema Android?
- 4. Eliminando todos los hilos abiertos por la aplicación
- 5. Obtener una lista de todos los empujes con Git
- 6. Eliminar todos los archivos creados por el usuario especificado
- 7. ¿Cómo obtener una lista de todos los servlets disponibles?
- 8. Volcar stacktraces de todos los hilos activos
- 9. ¿Desea borrar todos los elementos en caché creados por WebView?
- 10. Cómo obtener Pythonically todos los valores de una lista?
- 11. ¿Cómo puedo obtener una lista de todos los atributos del elemento css con jQuery?
- 12. Cómo obtener una lista de todos los usuarios en SharePoint
- 13. Determinar cuándo terminaron todos los hilos C#
- 14. Obtener los identificadores de todos los objetos en una lista
- 15. Android, ¿cómo puedo obtener una lista de todos los archivos en una carpeta?
- 16. Cerrar todos los hilos con una interrupción de teclado
- 17. ¿Cómo obtener todos los ID con jQuery?
- 18. Definir un UncaughtExceptionHandler global para todos los hilos de mi aplicación
- 19. ¿Cómo puedo obtener una lista de archivos cargados por mi proceso?
- 20. Quiero enumerar todos los países en mi lista desplegable, ¿dónde puedo obtener ese servicio web?
- 21. ¿Cómo puedo recortar todos los elementos en una lista?
- 22. ¿Cómo puedo obtener una lista de todos los trabajos en un tubo de habichuelas mágicas?
- 23. ¿Cómo puedo obtener una lista de recursos de directorio de mi aplicación de Android?
- 24. MongoMapper: encontrar todos los documentos creados en una fecha específica
- 25. ¿Cómo puedo obtener una lista de los eventos de una página?
- 26. ¿Dónde puedo obtener una lista de todos los países/ciudades para completar un cuadro de lista?
- 27. iPhone/iOS: ¿Cómo puedo obtener una lista de cadenas localizadas en todos los idiomas en los que se localiza mi aplicación?
- 28. ¿Cómo puedo obtener una lista de todos los módulos de biblioteca estándar de Python?
- 29. Cómo obtener los idiomas disponibles (No todos, solo los idiomas disponibles en mi aplicación)
- 30. PHP: Obtener una lista de todos los nombres de archivo incluidos en mi directorio de imágenes
Necesita una biblioteca personalizada para eso, llamada ** Información del proceso ** – TPAKTOPA
El enlace está roto, el dominio ya no existe. Hay una [copia archivada] (http://web.archive.org/web/20121010001118/http://vcldeveloper.com/products/products-components/process-info) de la página de 2012, pero el código descarga Está perdido. –