获取时间戳的正确方式

//代码来自kbengine
*nux:
inline uint64 timestamp()
{
#ifdef KBE_USE_RDTSC
	return timestamp_rdtsc();
#else // KBE_USE_RDTSC
	if (g_timingMethod == RDTSC_TIMING_METHOD)
		return timestamp_rdtsc();
	else if (g_timingMethod == GET_TIME_OF_DAY_TIMING_METHOD)
		return timestamp_gettimeofday();
	else //if (g_timingMethod == GET_TIME_TIMING_METHOD)
		return timestamp_gettime();

#endif // KBE_USE_RDTSC
}
inline uint64 timestamp_rdtsc()
{
	uint32 rethi, retlo;
	__asm__ __volatile__ (
		"rdtsc":
		"=d"    (rethi),
		"=a"    (retlo)
						  );
	return uint64(rethi) << 32 | retlo; 
}

// 使用 gettimeofday. 测试大概比RDTSC20倍-600倍。
// 此外,有一个问题
// 2.4内核下,连续两次调用gettimeofday的可能
// 返回一个结果是倒着走。
#include <sys/time.h>

inline uint64 timestamp_gettimeofday()
{
	timeval tv;
	gettimeofday( &tv, NULL );
	return 1000000ULL * uint64( tv.tv_sec ) + uint64( tv.tv_usec );
}

#include <time.h>
#include <asm/unistd.h>

inline uint64 timestamp_gettime()
{
	timespec tv;
	KBE_VERIFY(syscall( __NR_clock_gettime, CLOCK_MONOTONIC, &tv ) == 0);
	return 1000000000ULL * tv.tv_sec + tv.tv_nsec;
}

win:
#ifdef KBE_USE_RDTSC
#pragma warning (push)
#pragma warning (disable: 4035)
inline uint64 timestamp()
{
	__asm rdtsc
}
#pragma warning (pop)
#else // KBE_USE_RDTSC

#include <windows.h>

inline uint64 timestamp()
{
	LARGE_INTEGER counter;
	QueryPerformanceCounter( &counter );
	return counter.QuadPart;
}

#endif // KBE_USE_RDTSC
时间: 2024-10-11 09:45:20

获取时间戳的正确方式的相关文章

JS更改系统时间再获取时间戳不正确

今天做验证的时候,测试时间方面的时候发现一个问题,我提出了最简单的代码,代码如下. $("#div").click(function(){ var date = new Date(); console.log(date.getHours()) }) 这串代码没有问题,但是在Windows连续更改时间后,在Chrome上,它获取到的可能是之前的时间, 我这时候想到可能是缓存,所以我在 WebStorm 上用 nodejs 运行,果然,nodejs 没有这个问题 这只是一个小问题.在这里提

ngx lua获取时间戳的几种方式

原创自由de单车 最后发布于2017-02-14 14:58:43 阅读数 18218 收藏 在ngx_lua里,获取时间相关信息的方式大概有4种(见下面代码): print(string.format("%s, %s, %s, %s", ngx.time(), os.time(), os.clock(), ngx.now()))ngx.exit(200) -- 以上代码会输出:1486971340, 1486971340, 209.77, 1486971340.422 可见,通过os

action中请求参数获取的两种方式

action中请求参数获取的两种方式 1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 ja

在iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"

Swift中编写单例的正确方式

Swift中编写单例的正确方式 2015-12-07 10:23 编辑: yunpeng.hu 分类:Swift 来源:CocoaChina翻译活动 14 10647 Objective-CSwift单例 招聘信息: Cocos2d-x 工程师 cocos2dx手游客户端主程 wp开发 iOS开发工程师 iOS软件工程师 iOS研发工程师 iOS讲师 iOS开发工程师 iOS高级开发工程师 iOS 高级软件工程师 iOS高级开发工程师 本文由CocoaChina译者leon(社区ID)翻译自kr

JavaScript获取时间戳、日期格式化

一. js获取时间戳: 第一种方法: var timestamp1 = Date.parse(new Date()); 第二种方法: var timestamp2 = (new Date()).valueOf(); 第三种方法: var timestamp3 = new Date().getTime(); alert(timestamp1);//结果:1372751992000 alert(timestamp2);//结果:1372751992066 alert(timestamp3);//结果

Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同

一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个值:" id="txt"/> <input type="button" value="按钮" id="btn"/> <script> var txt=document.getElementB

解决小程序中Data.parse()获取时间戳IOS不兼容

由于与后台接口必须对比时间戳所以首先得前台获取时间戳.刚开始是获取手机本地时间,但用户改了时间就废了..... 后来就从服务器上获取个时间再转换为时间戳(是不是很操蛋,先从服务器上获取在TM的自己比较),但后台直接给我一个时间戳不就完事了么, 还就给我一个时间自己转然后问题就来了. [csharp] view plain copy var resData = '2017-3-14 10:03:45' console.log("返回时间:" + resData) var time = D

(转)获取 request 中用POST方式&quot;Content-type&quot;是&quot;application/x-www-form-urlencoded;charset=utf-8&quot;发送的 json 数据

request中发送json数据用post方式发送Content-type用application/json;charset=utf-8方式发送的话,直接用springMVC的@RequestBody标签接收后面跟实体对象就行了,spring会帮你自动拼装成对象,如果Content-type设置成application/x-www-form-urlencoded;charset=utf-8就不能用spring的东西了,只能以常规的方式获取json串了 方式一:通过流的方方式 [java] vie