Con l'aiuto della risposta di RRUZ sopra ho finalmente si avvicinò con questo codice per Borland Delphi:
const
THREAD_TERMINATE = $0001;
THREAD_SUSPEND_RESUME = $0002;
THREAD_GET_CONTEXT = $0008;
THREAD_SET_CONTEXT = $0010;
THREAD_SET_INFORMATION = $0020;
THREAD_QUERY_INFORMATION = $0040;
THREAD_SET_THREAD_TOKEN = $0080;
THREAD_IMPERSONATE = $0100;
THREAD_DIRECT_IMPERSONATION = $0200;
THREAD_SET_LIMITED_INFORMATION = $0400;
THREAD_QUERY_LIMITED_INFORMATION = $0800;
THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $03FF;
function OpenThread(dwDesiredAccess: DWord;
bInheritHandle: Bool;
dwThreadId: DWord): DWord; stdcall; external 'kernel32.dll';
procedure TForm1.Button1Click(Sender: TObject);
var iii:integer;
handle:thandle;
creationtime,exittime,kerneltime,usertime:filetime;
begin
Handle:=OpenThread(THREAD_SET_INFORMATION or THREAD_QUERY_INFORMATION, False, windows.GetCurrentThreadId);
if handle<>0 then
begin
getthreadtimes(Handle,creationtime,exittime,kerneltime,usertime);
label1.caption:='Total time for Thread #'+inttostr(windows.GetCurrentThreadId)+': '+inttostr((int64(kerneltime)+int64(usertime)) div 1000)+' msec';
CloseHandle(Handle);
end;
end;
fonte
2009-09-08 22:16:04
Ma questo ti dà solo il tempo di esecuzione del thread, non la percentuale di utilizzo della CPU. È inoltre possibile ottenere il tempo totale dalle chiamate WMI insieme alla percentuale in una singola query. – skamradt
Penso che sia possibile dedurre la quantità di utilizzo della CPU eseguendo il polling ogni secondo e, se il suo "kernel + usertime" aumenta di 1.0, ciò implica che ha usato il 100% di un core per quel secondo, sì? – rogerdpack