I`m new here and if this question in not for this group please tell me
where i should ask about it
i need to get a process cpu usage by his ID in win32, how can i do it ?
best regards
--
_____________________________
tlen: lemkat
gg: 4891654
http:///www.lemkat.soft-pc.pl
_____________________________
I think it is
> i need to get a process cpu usage by his ID in win32, how can i do it ?
GetProcessTimes:
http://windowssdk.msdn.microsoft.com/en-us/library/ms683223.aspx
--
Just another homepage:
http://damb.dk
But it's mine - Bertel
thanks a lot
i write something like this but it not work:
int TFMain::iFunGetCpuProcUsage( HANDLE hHandle )
{
LONG lKernel, lUser, lProcTime;
int iProcUsage;
DWORD dwTime;
FILETIME ftCreate, ftExit, ftUser, ftKernel,
ftNewUser, ftNewKernel;
DWORD dwOldTime, dwNewTime;
dwOldTime = timeGetTime();
GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel );
dwNewTime = timeGetTime();
GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftNewUser, &ftNewKernel );
lKernel = ftNewKernel.dwLowDateTime - ftKernel.dwLowDateTime;
lUser = ftNewUser.dwLowDateTime - ftUser.dwLowDateTime;
lProcTime = lKernel + lUser;
dwTime = dwNewTime-dwOldTime;
if( dwTime == 0 )
{
Sleep( 100 );
dwNewTime = timeGetTime();
dwTime = dwNewTime-dwOldTime;
}
iProcUsage = ( (lProcTime*100 ) / dwTime );
return iProcUsage;
i write something like this but it not work, the value is always 0:
int TFMain::iFunGetCpuProcUsage( HANDLE hHandle )
{
LONG lOldUser, lNewUser, lOldKernel, lNewKernel, lProcUsage, lUser, lKernel;
DWORD dwOldTime, dwNewTime, dwTime;
FILETIME ftCreate, ftExit, ftUser, ftKernel;
int iProcUsage;
dwOldTime = timeGetTime();
GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel );
// usertime
if( ftUser.dwLowDateTime < 0 ) ftUser.dwLowDateTime = 0;
if( ftUser.dwHighDateTime < 0 ) ftUser.dwHighDateTime = 0;
lOldUser = (((long)ftUser.dwHighDateTime) << 32 ) + ftUser.dwLowDateTime;
// kernel
if( ftKernel.dwLowDateTime < 0 ) ftKernel.dwLowDateTime = 0;
if( ftKernel.dwHighDateTime < 0 ) ftKernel.dwHighDateTime = 0;
lOldKernel = (((long)ftKernel.dwHighDateTime) << 32 ) +
ftKernel.dwLowDateTime;
dwNewTime = timeGetTime();
GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel );
// usertime
if( ftUser.dwLowDateTime < 0 ) ftUser.dwLowDateTime = 0;
if( ftUser.dwHighDateTime < 0 ) ftUser.dwHighDateTime = 0;
lNewUser = (((long)ftUser.dwHighDateTime) << 32 ) + ftUser.dwLowDateTime;
// kernel
if( ftKernel.dwLowDateTime < 0 ) ftKernel.dwLowDateTime = 0;
if( ftKernel.dwHighDateTime < 0 ) ftKernel.dwHighDateTime = 0;
lNewKernel = (((long)ftKernel.dwHighDateTime) << 32 ) +
ftKernel.dwLowDateTime;
lKernel = lNewKernel - lOldKernel;
lUser = lNewUser - lOldUser;
dwTime = dwNewTime-dwOldTime;
if( dwTime == 0 )
{
Sleep( 100 );
dwNewTime = timeGetTime();
dwTime = dwNewTime-dwOldTime;
}
iProcUsage = (((lKernel+lUser)*100 ) / dwTime );
return iProcUsage;
}
best regards
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <conio.h>
#include <mmsystem.h>
#include <tlhelp32.h>
#include <psapi.h>
#pragma hdrstop
#pragma argsused
int iFunGetTime( FILETIME ftTime )
{
SYSTEMTIME stTime;
int iTime;
FileTimeToSystemTime( &ftTime, &stTime );
iTime = stTime.wSecond * 1000;
iTime += stTime.wMilliseconds;
return iTime;
}
int iFunGetCpuProcUsage( HANDLE hHandle )
{
LONG lOldUser, lNewUser, lOldKernel, lNewKernel, lProcUsage, lUser, lKernel;
DWORD dwOldTime, dwNewTime, dwTime;
FILETIME ftCreate, ftExit, ftUser, ftKernel;
int iProcUsage;
/*
Yes:
GetProcessTimes( GetCurrentProcess(), t1, t2, t3, t4 );
t3 is Kerneltime in 100ns-Setps
t4 is Usertime in 100ns-Setps
t3+t4 is overall CPU-Time of Process
use a timer and calculate Percent = (actualtime-oldtime) /
((actualTickCount-OldTickCount)*100)
works fine and results are equal to Taskmanager!
*/
dwOldTime = timeGetTime();
if( ! GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel ) )
{
printf("error old getprocesstime %d", GetLastError() );
getch();
}
lOldUser = iFunGetTime( ftUser );
lOldKernel = iFunGetTime( ftKernel );
Sleep( 1000 );
dwNewTime = timeGetTime();
if( ! GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel ) )
{
printf("error new getprocesstime %d", GetLastError() );
getch();
}
lNewUser = iFunGetTime( ftUser );
lNewKernel = iFunGetTime( ftKernel );
lKernel = lNewKernel - lOldKernel;
lUser = lNewUser - lOldUser;
dwTime = dwNewTime-dwOldTime;
if( dwTime == 0 )
{
Sleep( 100 );
dwNewTime = timeGetTime();
dwTime = dwNewTime-dwOldTime;
}
iProcUsage = (((lKernel+lUser)*100 ) / dwTime );
return iProcUsage;
}
int main(int argc, char* argv[])
{
void *Snap;
PROCESSENTRY32 pe;
HEAPENTRY32 he;
HANDLE hHandle;
HANDLE hProcess;
AnsiString sText;
PROCESS_MEMORY_COUNTERS pmc;
memset( &pmc , 0, sizeof( pmc ) );
pmc.cb = sizeof( pmc );
Snap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS , 0);
pe.dwSize = sizeof( PROCESSENTRY32 );
if( Process32First( Snap , &pe ) )
{
do
{
if( strstr( pe.szExeFile , "bcb.exe" ) )
{
sText = pe.szExeFile;
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION ,
false ,
pe.th32ProcessID );
}
}
while( Process32Next( Snap , &pe ) );
CloseHandle( Snap );
}
while( !kbhit() )
{
clrscr();
printf("Uzycie procesora dla %s wynosi %d", sText.c_str() ,
iFunGetCpuProcUsage( hProcess ) );
Sleep( 1000 );
}
CloseHandle( hProcess );
}
//---------------------------------------------------------------------------