Got rid of some more Windows 2000 compatibility cruft.

This commit is contained in:
LoRd_MuldeR 2014-05-21 15:23:56 +02:00
parent 9b34076d55
commit e808cb2949
4 changed files with 36 additions and 110 deletions

@ -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>