os.clock()获取lua代码运行时间
2017-05-16 16:14
1691 查看
转自:原文链接请点击连接查看原文,尊重楼主版权。
os.clock():获取lua代码运行时间
解释:返回一个程序使用CPU时间的一个近似值。
-- 记录开始时间
local starttime = os.clock(); --> os.clock()用法
print(string.format("start time : %.4f", starttime));
-- 进行耗时操作
local sum = 0;
for i = 1, 100000000 do
sum = sum + i;
end
-- 记录结束时间
local endtime = os.clock(); --> os.clock()用法
print(string.format("end time : %.4f", endtime));
print(string.format("cost time : %.4f", endtime - starttime));结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/23/01f5a2b64db94c74c969a9fe0246355e)
总结:
从使用上来看这个函数很简单,程序开始的时候调用一次,结束的时候调用一次,然后做差值就可以了。
我们结果上来看一下,为什么start time不是0呢,原因就是我第一次调用clock()的地方并不是程序的开始,之前还做了一些其他的操作,导致了这里有0.027s的误差。
需要注意的是这个lua函数的实现是调用了c语言的函数函数库,实现代码如下:
static int os_clock (lua_State *L) {
lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC);
return 1;
}其中有个CLOCKS_PER_SEC值,在不同平台有着不同的定义,所以一定要注意函数的溢出问题,程序运行时间太长的话,使用clock有可能就会返回负数。
还有很多讨论是关于clock在不同平台的表现不同,在多线程会有影响等问题的,其实我也做了一些测试,有些结果和讨论中的一致,有些是相反的,这也许与平台相关吧,比如我举一个例子,在两个clock调用之间加入Sleep(1000),那么Sleep的时间是算入clock的(Windows平台+VS2008),但是很多帖子是说测试结果表明,Sleep这段时间不算入clock。
os.clock():获取lua代码运行时间
解释:返回一个程序使用CPU时间的一个近似值。
-- 记录开始时间
local starttime = os.clock(); --> os.clock()用法
print(string.format("start time : %.4f", starttime));
-- 进行耗时操作
local sum = 0;
for i = 1, 100000000 do
sum = sum + i;
end
-- 记录结束时间
local endtime = os.clock(); --> os.clock()用法
print(string.format("end time : %.4f", endtime));
print(string.format("cost time : %.4f", endtime - starttime));结果:
总结:
从使用上来看这个函数很简单,程序开始的时候调用一次,结束的时候调用一次,然后做差值就可以了。
我们结果上来看一下,为什么start time不是0呢,原因就是我第一次调用clock()的地方并不是程序的开始,之前还做了一些其他的操作,导致了这里有0.027s的误差。
需要注意的是这个lua函数的实现是调用了c语言的函数函数库,实现代码如下:
static int os_clock (lua_State *L) {
lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC);
return 1;
}其中有个CLOCKS_PER_SEC值,在不同平台有着不同的定义,所以一定要注意函数的溢出问题,程序运行时间太长的话,使用clock有可能就会返回负数。
还有很多讨论是关于clock在不同平台的表现不同,在多线程会有影响等问题的,其实我也做了一些测试,有些结果和讨论中的一致,有些是相反的,这也许与平台相关吧,比如我举一个例子,在两个clock调用之间加入Sleep(1000),那么Sleep的时间是算入clock的(Windows平台+VS2008),但是很多帖子是说测试结果表明,Sleep这段时间不算入clock。
相关文章推荐
- 获取代码运行时间,获取当前系统时间,日期
- VC++如何获取代码运行时间
- C++获取代码运行时间
- android上运行C++代码中的 time(NULL)获取当前时间戳,为什么得到的结果不对
- lua时间函数操作和对比代码,os.date() os.time()
- c++中获取代码运行时间
- 关于clock()函数统计代码运行时间
- VC实例分析:VC++通过汇编获取代码运行时间
- 在VC++通过汇编实现获取代码运行时间
- C++获取代码运行时间
- lua时间函数操作和对比代码,os.date() os.time()
- mach_absolute_time 获取系统运行时间 及 测试代码效率
- python获取代码运行时间
- 如何获取代码运行时间
- C++获取代码运行时间
- 获取单片机代码运行时间的方法
- C/c++获取运行代码的所需的时间
- 一周乱弹(1,HttpReques 获取请求地址2,去掉字符串中首尾空格及换行符、回车符等3,计算代码运行时间4,StringEscapeUtils对字符串进行各种转义与反转义5,分表查询记录总数)
- Lua - 获取系统时间(os.date()/os.time())
- clock_gettime测代码运行时间