sys/time.h移植代码
----by wangsh
在涉及跨平台的代码移植中,sys/time.h经常用到,这里简单列出我移植修改的代码,供大家丢砖头。
本文仅提供visual studio平台下移植代码中常会遇到的sys/time.h找不到问题,相信这两个文件,你一定会用得着的。啥也不说了,上代码。
微秒和纳秒部分没有实现,欢迎大家添加。
sys/time.h
#include
#include
#ifdef WIN32
//# include
#else
# include
#endif
/*
* Structure used in select() call, taken from the BSD file sys/time.h.
*/
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
};
#ifdef WIN32
//如果你的工程中的数据结构没有和windows.h中包含的相关数据结构重复,可以使用这段代码,不用使用time.cpp
void gettimeofday(struct timeval *tp, void *tzp);
/*
{
time_t clock;
struct tm tm;
SYSTEMTIME wtm;
GetLocalTime(&wtm);
tm.tm_year = wtm.wYear - 1900;
tm.tm_mon = wtm.wMonth - 1;
tm.tm_mday = wtm.wDay;
tm.tm_hour = wtm.wHour;
tm.tm_min = wtm.wMinute;
tm.tm_sec = wtm.wSecond;
tm. tm_isdst = -1;
clock = mktime(&tm);
tp->tv_sec = clock;
tp->tv_usec = wtm.wMilliseconds * 1000;
}
*/
void timersub(struct timeval *endPre, struct timeval *beginPre, struct timeval *result);
void timeradd(struct timeval *endPre, struct timeval *beginPre, struct timeval *result);
#endif /* WIN32 */
//sys/time.cpp
#include "time.h"
#define CLKS_PER_SEC ((clock_t)1000)
void gettimeofday(struct timeval *tp, void *tzp)
{
//time_t clock;
//tm ttime;
struct tm *newtime;
time_t aclock;
time_t clockn;
time( &aclock ); // Get time in seconds
newtime = localtime( &aclock ); // Convert time to struct tm form
clockn = mktime(newtime);
tp->tv_sec = clockn;
double uS = (clock() / CLKS_PER_SEC) * 1000000;
//tp->tv_usec = wtm.wMilliseconds * 1000;
//struct tm tm;
// SYSTEMTIME wtm;
// GetLocalTime(&wtm);
// tm.tm_year = wtm.wYear - 1900;
// tm.tm_mon = wtm.wMonth - 1;
// tm.tm_mday = wtm.wDay;
// tm.tm_hour = wtm.wHour;
// tm.tm_min = wtm.wMinute;
// tm.tm_sec = wtm.wSecond;
// tm. tm_isdst = -1;
// clock = mktime(&tm);
// tp->tv_sec = clock;
// tp->tv_usec = wtm.wMilliseconds * 1000;
}
void timersub(struct timeval *endPre, struct timeval *beginPre, struct timeval *result)
{
do
{
(result)->tv_sec = (endPre)->tv_sec - (beginPre)->tv_sec;
(result)->tv_usec = (endPre)->tv_usec - (beginPre)->tv_usec;
if ((result)->tv_usec < 0)
{
--(result)->tv_sec;
(result)->tv_usec += 1000000;
}
}
while (0);
}
void timeradd(struct timeval *endPre, struct timeval *beginPre, struct timeval *result)
{
do
{
(result)->tv_sec = (endPre)->tv_sec + (beginPre)->tv_sec;
(result)->tv_usec = (endPre)->tv_usec + (beginPre)->tv_usec;
if ((result)->tv_usec >= 1000000)
{
++(result)->tv_sec;
(result)->tv_usec -= 1000000;
}
}
while (0);
}