2022-05-30 11:01:23 +00:00
|
|
|
#include "HGTime.h"
|
|
|
|
#include "HGInc.h"
|
|
|
|
|
|
|
|
HGResult HGAPI HGBase_GetLocalTime(HGTimeInfo* timeInfo)
|
|
|
|
{
|
|
|
|
if (NULL == timeInfo)
|
|
|
|
{
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
SYSTEMTIME st;
|
|
|
|
GetLocalTime(&st);
|
|
|
|
timeInfo->year = st.wYear;
|
|
|
|
timeInfo->month = st.wMonth;
|
|
|
|
timeInfo->day = st.wDay;
|
|
|
|
timeInfo->dayOfWeek = st.wDayOfWeek;
|
|
|
|
timeInfo->hour = st.wHour;
|
|
|
|
timeInfo->minute = st.wMinute;
|
|
|
|
timeInfo->second = st.wSecond;
|
|
|
|
timeInfo->milliseconds = st.wMilliseconds;
|
|
|
|
#else
|
|
|
|
struct timeval time;
|
|
|
|
gettimeofday(&time, NULL);
|
|
|
|
struct tm* p = localtime(&time.tv_sec);
|
|
|
|
assert(NULL != p);
|
|
|
|
timeInfo->year = p->tm_year + 1900;
|
|
|
|
timeInfo->month = 1 + p->tm_mon;
|
|
|
|
timeInfo->day = p->tm_mday;
|
|
|
|
timeInfo->dayOfWeek = p->tm_wday;
|
|
|
|
timeInfo->hour = p->tm_hour;
|
|
|
|
timeInfo->minute = p->tm_min;
|
|
|
|
timeInfo->second = p->tm_sec;
|
|
|
|
timeInfo->milliseconds = time.tv_usec / 1000;
|
|
|
|
#endif
|
|
|
|
return HGBASE_ERR_OK;
|
2023-03-02 03:49:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
HGResult HGAPI HGBase_GetTickCount(HGULonglong* tickCount)
|
|
|
|
{
|
|
|
|
if (NULL == tickCount)
|
|
|
|
{
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
LARGE_INTEGER performanceCount;
|
|
|
|
if (!QueryPerformanceCounter(&performanceCount))
|
|
|
|
{
|
|
|
|
return HGBASE_ERR_FAIL;
|
|
|
|
}
|
|
|
|
|
|
|
|
*tickCount = performanceCount.QuadPart;
|
|
|
|
#else
|
|
|
|
struct timespec ts;
|
|
|
|
if (0 != clock_gettime(CLOCK_MONOTONIC, &ts))
|
|
|
|
{
|
|
|
|
return HGBASE_ERR_FAIL;
|
|
|
|
}
|
|
|
|
|
|
|
|
*tickCount = (HGULonglong)ts.tv_sec * (HGULonglong)1000000000 + (HGULonglong)ts.tv_nsec;
|
|
|
|
#endif
|
|
|
|
return HGBASE_ERR_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
HGResult HGAPI HGBase_GetIntervalSeconds(HGULonglong startTickCount, HGULonglong stopTickCount, HGDouble* seconds)
|
|
|
|
{
|
|
|
|
if (startTickCount > stopTickCount || NULL == seconds)
|
|
|
|
{
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
|
|
|
|
LARGE_INTEGER frequency;
|
|
|
|
if (!QueryPerformanceFrequency(&frequency))
|
|
|
|
{
|
|
|
|
return HGBASE_ERR_FAIL;
|
|
|
|
}
|
|
|
|
|
|
|
|
*seconds = (HGDouble)(stopTickCount - startTickCount) / (HGDouble)frequency.QuadPart;
|
|
|
|
#else
|
|
|
|
* seconds = (HGDouble)(stopTickCount - startTickCount) / (HGDouble)1000000000.0;
|
|
|
|
#endif
|
|
|
|
return HGBASE_ERR_OK;
|
2022-05-30 11:01:23 +00:00
|
|
|
}
|