Sto utilizzando delphi 2010, è comunque necessario conoscere il numero di thread in esecuzione del progetto tramite la funzione delphi o windows api?Numero di thread in esecuzione
risposta
è possibile utilizzare la funzione di CreateToolhelp32Snapshot
con la bandierina TH32CS_SNAPTHREAD
vedono questo codice.
uses
PsAPI,
TlHelp32,
Windows,
SysUtils;
function GetTThreadsCount(PID:Cardinal): Integer;
var
SnapProcHandle: THandle;
NextProc : Boolean;
TThreadEntry : TThreadEntry32;
Proceed : Boolean;
begin
Result:=0;
SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); //Takes a snapshot of the all threads
Proceed := (SnapProcHandle <> INVALID_HANDLE_VALUE);
if Proceed 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
Inc(Result);
NextProc := Thread32Next(SnapProcHandle, TThreadEntry);//get the Next Thread
end;
finally
CloseHandle(SnapProcHandle);//Close the Handle
end;
end;
E chiamare in questo modo, utilizzando la funzione GetCurrentProcessId
wich Recupera il PID (identificatore di processo) della vostra applicazione.
Var
Num :integer;
begin
Num:=GetTThreadsCount(GetCurrentProcessId);
end;
È un po 'eccessivo per ottenere un conteggio, ma CreateToolhelp32Snapshot
seguito da Thread32First
e Thread32Next
dovrebbe fare il lavoro.
Vedere il codice di esempio here che enumera i thread di un processo.
Utilizzando WMI è possibile ottenere l'elenco dei processi runninig nel sistema e tutte le informazioni sul processo. È necessario utilizzare la classe Win32_process.
Questa classe comprende il metodo threadcount:
······································· ·····
ThreadCount
Numero di thread attivi in un processo. Un'istruzione è l'unità di base di esecuzione in un processore e un thread è l'oggetto che esegue un'istruzione. Ogni processo in esecuzione ha almeno un thread. ·················································· ··········
Here (sul mio web) è possibile trovare risorse su questo tema.
(1) VProcess; Applicazione che utilizza GLibWMI Library per recuperare tutti i processi in esecuzione e informazioni su questo. ThreadCount è incluso in queste informazioni. Il progetto è gratuito e la fonte è inclusa (puoi vederla e valutarla).
(2) È possibile scaricare GLibWMI e vedere la componente TProcessInfo che ti danno tutte le informazioni di processo (è utilizzato su VProcess). Questa libreria è gratuita e il codice sorgente è disponibile. Puoi vederlo e valutare il codice. Guarda le demo che testano questo componente.
Spero che questo sia utile per voi.
Saluti.
- 1. Come fare un certo numero di thread sempre in esecuzione
- 2. Numero massimo di thread
- 3. Elasticsearch troppe thread in esecuzione
- 4. Thread DestroyJavaVM SEMPRE in esecuzione
- 5. Esecuzione numero N di thread in parallelo e in modo sequenziale
- 6. Come impostare il numero di thread in fase di esecuzione (evitando + RTS -N #)
- 7. Imposta il numero massimo di thread in fase di esecuzione su numpy/openblas
- 8. quarzo scheduler max proprietà numero di thread
- 9. Numero limite di thread in Groovy
- 10. Numero limite di thread in numpy
- 11. Numero massimo di thread Android
- 12. Android: thread non in esecuzione in parallelo
- 13. Thread non in esecuzione in parallelo
- 14. uccidere un thread in esecuzione in java?
- 15. Ottimizzazione del numero massimo di thread in esecuzione su una CPU
- 16. Dump StackTrace per ogni thread in esecuzione
- 17. Python: il thread è ancora in esecuzione
- 18. Esecuzione di gruppi di thread separatamente in jmeter
- 19. Esecuzione di codice all'interno di un altro thread in javascript
- 20. Come limitare il numero massimo di thread paralleli in perl
- 21. Come contare i thread in esecuzione nel server ruby
- 22. Numero di thread creati da GCD?
- 23. Gestione del numero dinamico di thread
- 24. Parallel.ForEach limita il numero di thread attivi?
- 25. Esecuzione di una GUI Cocoa in una thread non principale
- 26. Ritardo nel thread in esecuzione a causa di system.out.println statement
- 27. Cambia numero di thread per il server Jenkins
- 28. Elenca tutti i thread in esecuzione/in coda in ThreadPoolTaskExecutor
- 29. sendMessage dall'esterno in autostrada in esecuzione in thread separato
- 30. Limitare il numero di thread paralleli in C#
Grazie per la risposta. – lmengyew