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

View File

@ -35,7 +35,7 @@
#define VER_LAMEXP_MINOR_LO 0
#define VER_LAMEXP_TYPE RC
#define VER_LAMEXP_PATCH 1
#define VER_LAMEXP_BUILD 1549
#define VER_LAMEXP_BUILD 1550
#define VER_LAMEXP_CONFG 1528
///////////////////////////////////////////////////////////////////////////////

View File

@ -811,15 +811,14 @@ static __forceinline bool lamexp_check_for_debugger(void)
{
return true;
}
__try
BOOL bHaveDebugger = FALSE;
if(CheckRemoteDebuggerPresent(GetCurrentProcess(), &bHaveDebugger))
{
__debugbreak();
if(bHaveDebugger) return true;
}
__except(1)
{
return IsDebuggerPresent();
}
return true;
return IsDebuggerPresent();
}
/*

View File

@ -24,32 +24,12 @@
#include "Global.h"
#include <QDir>
#include <QLibrary>
//Windows includes
#define NOMINMAX
#define WIN32_LEAN_AND_MEAN
#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
////////////////////////////////////////////////////////////
@ -101,104 +81,52 @@ ULONGLONG CPUObserverThread::filetime2ulonglong(const void *ftime)
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;
BYTE *performanceInfoBuffer = NULL;
NtQuerySystemInformationPtr querySysInfo = NULL;
GetSystemTimesPtr getSystemTimes = NULL;
if(kernel32.load())
for(size_t i = 0; i < 2; i++)
{
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(ntdll.load())
if(GetSystemTimes(&idlTime, &sysTime, &usrTime))
{
querySysInfo = reinterpret_cast<NtQuerySystemInformationPtr>(ntdll.resolve("NtQuerySystemInformation"));
if(querySysInfo)
{
querySysInfo(SystemProcInfo, &performanceInfoBuffer, 0, &performanceInfoSize);
if(performanceInfoSize < sizeof(SYSTEM_PROC_INFO)) performanceInfoSize = sizeof(SYSTEM_PROC_INFO);
performanceInfoBuffer = new BYTE[performanceInfoSize];
}
}
}
sys[1] = sys[0]; sys[0] = filetime2ulonglong(&sysTime);
usr[1] = usr[0]; usr[0] = filetime2ulonglong(&usrTime);
idl[1] = idl[0]; idl[0] = filetime2ulonglong(&idlTime);
if(getSystemTimes || (querySysInfo && performanceInfoBuffer))
{
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(first)
{
if(ok = getSystemTimes(&idlTime, &sysTime, &usrTime))
{
sys[1] = sys[0]; sys[0] = filetime2ulonglong(&sysTime);
usr[1] = usr[0]; usr[0] = filetime2ulonglong(&usrTime);
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;
}
first = false;
emit currentUsageChanged(1.0);
msleep(250);
continue;
}
if(ok)
{
if(first)
{
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 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 timeWrk = timeSum - timeIdl; //Time the CPU spent working
ULONGLONG timeSum = timeUsr + timeSys; //Overall CPU time that has elapsed
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);
if(current != previous)
{
emit currentUsageChanged(current);
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;
}
}
////////////////////////////////////////////////////////////

View File

@ -31,7 +31,6 @@
#include <QProcess>
#include <QMap>
#include <QDir>
#include <QLibrary>
#include <QResource>
#include <QTextStream>
#include <QRunnable>