Got rid of some more Windows 2000 compatibility cruft.
This commit is contained in:
parent
9b34076d55
commit
e808cb2949
@ -35,7 +35,7 @@
|
|||||||
#define VER_LAMEXP_MINOR_LO 0
|
#define VER_LAMEXP_MINOR_LO 0
|
||||||
#define VER_LAMEXP_TYPE RC
|
#define VER_LAMEXP_TYPE RC
|
||||||
#define VER_LAMEXP_PATCH 1
|
#define VER_LAMEXP_PATCH 1
|
||||||
#define VER_LAMEXP_BUILD 1549
|
#define VER_LAMEXP_BUILD 1550
|
||||||
#define VER_LAMEXP_CONFG 1528
|
#define VER_LAMEXP_CONFG 1528
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -811,15 +811,14 @@ static __forceinline bool lamexp_check_for_debugger(void)
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
__try
|
|
||||||
|
BOOL bHaveDebugger = FALSE;
|
||||||
|
if(CheckRemoteDebuggerPresent(GetCurrentProcess(), &bHaveDebugger))
|
||||||
{
|
{
|
||||||
__debugbreak();
|
if(bHaveDebugger) return true;
|
||||||
}
|
}
|
||||||
__except(1)
|
|
||||||
{
|
return IsDebuggerPresent();
|
||||||
return IsDebuggerPresent();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -24,32 +24,12 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QLibrary>
|
|
||||||
|
|
||||||
//Windows includes
|
//Windows includes
|
||||||
#define NOMINMAX
|
#define NOMINMAX
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
typedef enum { SystemProcInfo = 8 } SYSTEM_INFO_CLASS;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
LARGE_INTEGER IdleTime;
|
|
||||||
LARGE_INTEGER KrnlTime;
|
|
||||||
LARGE_INTEGER UserTime;
|
|
||||||
LARGE_INTEGER Reserved[2];
|
|
||||||
ULONG Reserved2;
|
|
||||||
}
|
|
||||||
SYSTEM_PROC_INFO;
|
|
||||||
|
|
||||||
typedef BOOL (WINAPI *GetSystemTimesPtr)(LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
|
|
||||||
typedef LONG (WINAPI *NtQuerySystemInformationPtr)(SYSTEM_INFO_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength);
|
|
||||||
|
|
||||||
#define IS_OK(X) (((LONG)(X)) == ((LONG)0x00000000L))
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Constructor & Destructor
|
// Constructor & Destructor
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -101,104 +81,52 @@ ULONGLONG CPUObserverThread::filetime2ulonglong(const void *ftime)
|
|||||||
|
|
||||||
void CPUObserverThread::observe(void)
|
void CPUObserverThread::observe(void)
|
||||||
{
|
{
|
||||||
QLibrary kernel32("kernel32.dll"), ntdll("ntdll.dll");
|
bool first = true;
|
||||||
|
double previous = -1.0;
|
||||||
|
FILETIME sysTime, usrTime, idlTime;
|
||||||
|
ULONGLONG sys[2], usr[2], idl[2];
|
||||||
|
|
||||||
ULONG performanceInfoSize = 0;
|
for(size_t i = 0; i < 2; i++)
|
||||||
BYTE *performanceInfoBuffer = NULL;
|
|
||||||
NtQuerySystemInformationPtr querySysInfo = NULL;
|
|
||||||
GetSystemTimesPtr getSystemTimes = NULL;
|
|
||||||
|
|
||||||
if(kernel32.load())
|
|
||||||
{
|
{
|
||||||
getSystemTimes = reinterpret_cast<GetSystemTimesPtr>(kernel32.resolve("GetSystemTimes"));
|
sys[i] = 0; usr[i] = 0; idl[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!getSystemTimes)
|
forever
|
||||||
{
|
{
|
||||||
qWarning("GetSystemTimes() not found, falling back to NtQueryInformationProcess().");
|
if(GetSystemTimes(&idlTime, &sysTime, &usrTime))
|
||||||
if(ntdll.load())
|
|
||||||
{
|
{
|
||||||
querySysInfo = reinterpret_cast<NtQuerySystemInformationPtr>(ntdll.resolve("NtQuerySystemInformation"));
|
sys[1] = sys[0]; sys[0] = filetime2ulonglong(&sysTime);
|
||||||
if(querySysInfo)
|
usr[1] = usr[0]; usr[0] = filetime2ulonglong(&usrTime);
|
||||||
{
|
idl[1] = idl[0]; idl[0] = filetime2ulonglong(&idlTime);
|
||||||
querySysInfo(SystemProcInfo, &performanceInfoBuffer, 0, &performanceInfoSize);
|
|
||||||
if(performanceInfoSize < sizeof(SYSTEM_PROC_INFO)) performanceInfoSize = sizeof(SYSTEM_PROC_INFO);
|
|
||||||
performanceInfoBuffer = new BYTE[performanceInfoSize];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(getSystemTimes || (querySysInfo && performanceInfoBuffer))
|
if(first)
|
||||||
{
|
|
||||||
bool first = true;
|
|
||||||
double previous = -1.0;
|
|
||||||
FILETIME sysTime, usrTime, idlTime;
|
|
||||||
ULONGLONG sys[2], usr[2], idl[2];
|
|
||||||
|
|
||||||
for(size_t i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
sys[i] = 0; usr[i] = 0; idl[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
forever
|
|
||||||
{
|
|
||||||
bool ok = false;
|
|
||||||
|
|
||||||
if(getSystemTimes)
|
|
||||||
{
|
{
|
||||||
if(ok = getSystemTimes(&idlTime, &sysTime, &usrTime))
|
first = false;
|
||||||
{
|
emit currentUsageChanged(1.0);
|
||||||
sys[1] = sys[0]; sys[0] = filetime2ulonglong(&sysTime);
|
msleep(250);
|
||||||
usr[1] = usr[0]; usr[0] = filetime2ulonglong(&usrTime);
|
continue;
|
||||||
idl[1] = idl[0]; idl[0] = filetime2ulonglong(&idlTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(ok = IS_OK(querySysInfo(SystemProcInfo, performanceInfoBuffer, performanceInfoSize, NULL)))
|
|
||||||
{
|
|
||||||
sys[1] = sys[0]; sys[0] = reinterpret_cast<SYSTEM_PROC_INFO*>(performanceInfoBuffer)[0].KrnlTime.QuadPart;
|
|
||||||
usr[1] = usr[0]; usr[0] = reinterpret_cast<SYSTEM_PROC_INFO*>(performanceInfoBuffer)[0].UserTime.QuadPart;
|
|
||||||
idl[1] = idl[0]; idl[0] = reinterpret_cast<SYSTEM_PROC_INFO*>(performanceInfoBuffer)[0].IdleTime.QuadPart;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ok)
|
ULONGLONG timeIdl = (idl[0] - idl[1]); //Idle time only
|
||||||
{
|
ULONGLONG timeSys = (sys[0] - sys[1]); //Kernel mode time (incl. Idle time!)
|
||||||
if(first)
|
ULONGLONG timeUsr = (usr[0] - usr[1]); //User mode time only
|
||||||
{
|
|
||||||
first = false;
|
|
||||||
emit currentUsageChanged(1.0);
|
|
||||||
msleep(250);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ULONGLONG timeIdl = (idl[0] - idl[1]); //Idle time only
|
|
||||||
ULONGLONG timeSys = (sys[0] - sys[1]); //Kernel mode time (incl. Idle time!)
|
|
||||||
ULONGLONG timeUsr = (usr[0] - usr[1]); //User mode time only
|
|
||||||
|
|
||||||
ULONGLONG timeSum = timeUsr + timeSys; //Overall CPU time that has elapsed
|
ULONGLONG timeSum = timeUsr + timeSys; //Overall CPU time that has elapsed
|
||||||
ULONGLONG timeWrk = timeSum - timeIdl; //Time the CPU spent working
|
ULONGLONG timeWrk = timeSum - timeIdl; //Time the CPU spent working
|
||||||
|
|
||||||
if(timeSum > 0)
|
if(timeSum > 0)
|
||||||
|
{
|
||||||
|
double current = static_cast<double>(timeWrk) / static_cast<double>(timeSum);
|
||||||
|
if(current != previous)
|
||||||
{
|
{
|
||||||
double current = static_cast<double>(timeWrk) / static_cast<double>(timeSum);
|
emit currentUsageChanged(current);
|
||||||
if(current != previous)
|
previous = current;
|
||||||
{
|
|
||||||
emit currentUsageChanged(current);
|
|
||||||
previous = current;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(m_semaphore.tryAcquire(1, 2000)) break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qWarning("NtQueryInformationProcess() not available, giving up!");
|
|
||||||
}
|
|
||||||
|
|
||||||
LAMEXP_DELETE_ARRAY(performanceInfoBuffer);
|
if(m_semaphore.tryAcquire(1, 2000)) break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QLibrary>
|
|
||||||
#include <QResource>
|
#include <QResource>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QRunnable>
|
#include <QRunnable>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user