TD-1057 system function in windows
This commit is contained in:
parent
1169eba1c8
commit
1e24b99534
|
@ -43,7 +43,11 @@ long interlocked_add_fetch_32(long volatile* ptr, long val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
__int64 interlocked_add_fetch_64(__int64 volatile* ptr, __int64 val) {
|
__int64 interlocked_add_fetch_64(__int64 volatile* ptr, __int64 val) {
|
||||||
|
#ifdef _WIN64
|
||||||
return _InterlockedExchangeAdd64(ptr, val) + val;
|
return _InterlockedExchangeAdd64(ptr, val) + val;
|
||||||
|
#else
|
||||||
|
return _InterlockedExchangeAdd(ptr, val) + val;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// and
|
// and
|
||||||
|
|
|
@ -21,9 +21,29 @@
|
||||||
#include "tulog.h"
|
#include "tulog.h"
|
||||||
#include "tutil.h"
|
#include "tutil.h"
|
||||||
|
|
||||||
|
unsigned char _MyBitScanForward64(unsigned long *ret, uint64_t x) {
|
||||||
|
unsigned long x0 = (unsigned long)x, top, bottom;
|
||||||
|
_BitScanForward(&top, (unsigned long)(x >> 32));
|
||||||
|
_BitScanForward(&bottom, x0);
|
||||||
|
*ret = x0 ? bottom : 32 + top;
|
||||||
|
return x != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char _MyBitScanReverse64(unsigned long *ret, uint64_t x) {
|
||||||
|
unsigned long x1 = (unsigned long)(x >> 32), top, bottom;
|
||||||
|
_BitScanReverse(&top, x1);
|
||||||
|
_BitScanReverse(&bottom, (unsigned long)x);
|
||||||
|
*ret = x1 ? top + 32 : bottom;
|
||||||
|
return x != 0;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t BUILDIN_CLZL(uint64_t val) {
|
int32_t BUILDIN_CLZL(uint64_t val) {
|
||||||
unsigned long r = 0;
|
unsigned long r = 0;
|
||||||
|
#ifdef _WIN64
|
||||||
_BitScanReverse64(&r, val);
|
_BitScanReverse64(&r, val);
|
||||||
|
#else
|
||||||
|
_MyBitScanReverse64(&r, val);
|
||||||
|
#endif
|
||||||
return (int)(r >> 3);
|
return (int)(r >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +55,11 @@ int32_t BUILDIN_CLZ(uint32_t val) {
|
||||||
|
|
||||||
int32_t BUILDIN_CTZL(uint64_t val) {
|
int32_t BUILDIN_CTZL(uint64_t val) {
|
||||||
unsigned long r = 0;
|
unsigned long r = 0;
|
||||||
|
#ifdef _WIN64
|
||||||
_BitScanForward64(&r, val);
|
_BitScanForward64(&r, val);
|
||||||
|
#else
|
||||||
|
_MyBitScanForward64(&r, val);
|
||||||
|
#endif
|
||||||
return (int)(r >> 3);
|
return (int)(r >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,4 +67,4 @@ int32_t BUILDIN_CTZ(uint32_t val) {
|
||||||
unsigned long r = 0;
|
unsigned long r = 0;
|
||||||
_BitScanForward(&r, val);
|
_BitScanForward(&r, val);
|
||||||
return (int)(r >> 3);
|
return (int)(r >> 3);
|
||||||
}
|
}
|
|
@ -21,6 +21,15 @@
|
||||||
#include "ttimer.h"
|
#include "ttimer.h"
|
||||||
#include "tulog.h"
|
#include "tulog.h"
|
||||||
#include "tutil.h"
|
#include "tutil.h"
|
||||||
|
#if (_WIN64)
|
||||||
|
#include <windows.h>
|
||||||
|
#include <iphlpapi.h>
|
||||||
|
#include <psapi.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <mswsock.h>
|
||||||
|
#pragma comment(lib, "Mswsock.lib ")
|
||||||
|
#endif
|
||||||
|
|
||||||
static void taosGetSystemTimezone() {
|
static void taosGetSystemTimezone() {
|
||||||
// get and set default timezone
|
// get and set default timezone
|
||||||
|
@ -69,11 +78,64 @@ void taosGetSystemInfo() {
|
||||||
taosGetSystemLocale();
|
taosGetSystemLocale();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool taosGetDisk() { return true; }
|
bool taosGetDisk() {
|
||||||
|
const double unit = 1024 * 1024 * 1024;
|
||||||
|
BOOL fResult;
|
||||||
|
unsigned _int64 i64FreeBytesToCaller;
|
||||||
|
unsigned _int64 i64TotalBytes;
|
||||||
|
unsigned _int64 i64FreeBytes;
|
||||||
|
char dir[4] = {'C', ':', '\\', '\0'};
|
||||||
|
int drive_type;
|
||||||
|
|
||||||
|
if (tscEmbedded) {
|
||||||
|
drive_type = GetDriveTypeA(dir);
|
||||||
|
if (drive_type == DRIVE_FIXED) {
|
||||||
|
fResult = GetDiskFreeSpaceExA(dir, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes,
|
||||||
|
(PULARGE_INTEGER)&i64FreeBytes);
|
||||||
|
if (fResult) {
|
||||||
|
tsTotalDataDirGB = tsTotalLogDirGB = tsTotalTmpDirGB = (float)(i64TotalBytes / unit);
|
||||||
|
tsAvailDataDirGB = tsAvailLogDirGB = tsAvailTmpDirectorySpace = (float)(i64FreeBytes / unit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool taosReadProcIO(int64_t *readbyte, int64_t *writebyte) {
|
||||||
|
IO_COUNTERS io_counter;
|
||||||
|
if (GetProcessIoCounters(GetCurrentProcess(), &io_counter)) {
|
||||||
|
if (readbyte) *readbyte = io_counter.ReadTransferCount;
|
||||||
|
if (writebyte) *writebyte = io_counter.WriteTransferCount;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool taosGetProcIO(float *readKB, float *writeKB) {
|
bool taosGetProcIO(float *readKB, float *writeKB) {
|
||||||
*readKB = 0;
|
static int64_t lastReadbyte = -1;
|
||||||
*writeKB = 0;
|
static int64_t lastWritebyte = -1;
|
||||||
|
|
||||||
|
int64_t curReadbyte = 0;
|
||||||
|
int64_t curWritebyte = 0;
|
||||||
|
|
||||||
|
if (!taosReadProcIO(&curReadbyte, &curWritebyte)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastReadbyte == -1 || lastWritebyte == -1) {
|
||||||
|
lastReadbyte = curReadbyte;
|
||||||
|
lastWritebyte = curWritebyte;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*readKB = (float)((double)(curReadbyte - lastReadbyte) / 1024);
|
||||||
|
*writeKB = (float)((double)(curWritebyte - lastWritebyte) / 1024);
|
||||||
|
if (*readKB < 0) *readKB = 0;
|
||||||
|
if (*writeKB < 0) *writeKB = 0;
|
||||||
|
|
||||||
|
lastReadbyte = curReadbyte;
|
||||||
|
lastWritebyte = curWritebyte;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,12 +151,31 @@ bool taosGetCpuUsage(float *sysCpuUsage, float *procCpuUsage) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool taosGetProcMemory(float *memoryUsedMB) {
|
bool taosGetProcMemory(float *memoryUsedMB) {
|
||||||
*memoryUsedMB = 0;
|
unsigned bytes_used = 0;
|
||||||
|
#if defined(_WIN32) && defined(_MSC_VER)
|
||||||
|
PROCESS_MEMORY_COUNTERS pmc;
|
||||||
|
HANDLE cur_proc = GetCurrentProcess();
|
||||||
|
|
||||||
|
if (GetProcessMemoryInfo(cur_proc, &pmc, sizeof(pmc))) {
|
||||||
|
bytes_used = (unsigned)(pmc.WorkingSetSize + pmc.PagefileUsage);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
*memoryUsedMB = (float)bytes_used / 1024 / 1024;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool taosGetSysMemory(float *memoryUsedMB) {
|
bool taosGetSysMemory(float *memoryUsedMB) {
|
||||||
*memoryUsedMB = 0;
|
MEMORYSTATUSEX memsStat;
|
||||||
|
float nMemFree;
|
||||||
|
float nMemTotal;
|
||||||
|
|
||||||
|
memsStat.dwLength = sizeof(memsStat);
|
||||||
|
if (!GlobalMemoryStatusEx(&memsStat)) { return false; }
|
||||||
|
nMemFree = memsStat.ullAvailPhys / (1024.0f * 1024.0f);
|
||||||
|
nMemTotal = memsStat.ullTotalPhys / (1024.0f * 1024.0f);
|
||||||
|
*memoryUsedMB = nMemTotal - nMemFree;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue