6 #include <epicsMutex.h>
7 #include <epicsGuard.h>
9 #include <epicsExport.h>
16 ULARGE_INTEGER u1, u2;
17 u1.LowPart = f1.dwLowDateTime;
18 u1.HighPart = f1.dwHighDateTime;
19 u2.LowPart = f2.dwLowDateTime;
20 u2.HighPart = f2.dwHighDateTime;
21 return static_cast<double>(u1.QuadPart - u2.QuadPart) / 1e7;
27 static epicsMutex procMutex;
29 double procUptime = -1.0;
32 FILETIME procCreationTime, procExitTime, procKernelTime, procUserTime, sysTime;
33 epicsGuard<epicsMutex> _lock(procMutex);
34 HANDLE hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
35 if( hProcessSnap == INVALID_HANDLE_VALUE )
39 pe32.dwSize =
sizeof( PROCESSENTRY32 );
40 if( !Process32First( hProcessSnap, &pe32 ) )
42 CloseHandle( hProcessSnap );
47 if ( !stricmp(pe32.szExeFile, procExecutableName) )
50 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe32.th32ProcessID);
51 if( hProcess != NULL )
53 if (GetProcessTimes(hProcess, &procCreationTime, &procExitTime, &procKernelTime, &procUserTime) != 0)
55 GetSystemTimeAsFileTime(&sysTime);
58 CloseHandle( hProcess );
61 }
while( Process32Next( hProcessSnap, &pe32 ) );
62 CloseHandle( hProcessSnap );
static double diffFileTimes(const FILETIME &f1, const FILETIME &f2)
filetime uses 100ns units, returns difference in seconds
epicsShareFunc double getProcessUptime(const char *procExecutableName)
returns -1.0 if process not running, else process uptime in seconds