git-svn-id: svn://db.shs.com.ru/pip@492 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2017-05-02 12:40:56 +00:00
parent 08052ac9e2
commit 2bb1ab82a9
8 changed files with 162 additions and 117 deletions

View File

@@ -51,6 +51,7 @@ clock_serv_t __pi_mac_clock;
#ifdef WINDOWS
FILETIME __pi_ftjan1970;
long long __pi_perf_freq = -1;
PINtQueryTimerResolution getTimerResolutionAddr = 0;
PINtSetTimerResolution setTimerResolutionAddr = 0;
#endif

View File

@@ -25,6 +25,7 @@
# include <stdarg.h>
# include <windef.h>
# include <winbase.h>
typedef void(*PINtQueryTimerResolution)(PULONG, PULONG, PULONG);
typedef void(*PINtSetTimerResolution)(ULONG, BOOLEAN, PULONG);
#endif
#ifdef CC_GCC

View File

@@ -28,7 +28,17 @@
#ifdef WINDOWS
# include <winsock2.h>
extern FILETIME __pi_ftjan1970;
extern PINtQueryTimerResolution getTimerResolutionAddr;
extern PINtSetTimerResolution setTimerResolutionAddr;
void __PISetTimerResolution() {
if (setTimerResolutionAddr == NULL || getTimerResolutionAddr == NULL)
return;
ULONG max(0), min(0), cur(0);
getTimerResolutionAddr(&max, &min, &cur);
//printf("getTimerResolution %lu %lu %lu\n", min, max, cur);
setTimerResolutionAddr(min, TRUE, &cur);
//printf("setTimerResolution %lu\n", cur);
}
#else
# include <pwd.h>
# include <sys/utsname.h>
@@ -135,7 +145,11 @@ PIInit::PIInit() {
// Sleep precision init
PRIVATE->ntlib = LoadLibrary("ntdll.dll");
if (PRIVATE->ntlib) setTimerResolutionAddr = (PINtSetTimerResolution)GetProcAddress(PRIVATE->ntlib, "NtSetTimerResolution");
if (PRIVATE->ntlib) {
getTimerResolutionAddr = (PINtQueryTimerResolution)GetProcAddress(PRIVATE->ntlib, "NtQueryTimerResolution");
setTimerResolutionAddr = (PINtSetTimerResolution)GetProcAddress(PRIVATE->ntlib, "NtSetTimerResolution");
}
__PISetTimerResolution();
/*if (setTimerResolution) setTimerResolutionAddr(1, TRUE, &(PRIVATE->prev_res));*/
# endif
//piDebug = true;

View File

@@ -60,6 +60,7 @@
void piUSleep(int usecs) {
if (usecs <= 0) return;
#ifdef WINDOWS
//printf("Sleep %d\n", usecs / 1000);
if (usecs > 0) Sleep(usecs / 1000);
#else
usecs -= PISystemTests::usleep_offset_us;