先看一下这段代码
执行:
-
function sleep(n)
-
local socket = require("socket")
-
socket.select(nil, nil, n)
-
end
-
-
local socket = require("socket")
-
local o_start = os.clock()
-
local g_start = socket.gettime()
-
sleep(0.005)
-
local o_end = os.clock()
-
local g_end = socket.gettime()
-
local o_diff = o_end - o_start
-
local g_diff = g_end - g_start
-
-
print("o_start: "..o_start)
-
print("g_start: "..g_start)
-
print("o_end: "..o_end)
-
print("g_end: "..g_end)
-
print("o_diff: "..o_diff)
-
print("g_diff: "..g_diff)
结果:
-
o_start: 0
-
g_start: 1473155233.693
-
o_end: 0
-
g_end: 1473155233.6982
-
o_diff: 0
-
g_diff: 0.0051391124725342
1.sleep这个函数使用的是socke套接字,很明显这里相当于睡眠0.005秒。实践后发现,在openwrt上只能精确到毫秒,但这比使用os.execute("sleep 1")好多了。因为在openwrt上sleep只支持秒,不支持sleep 0.1之类的毫秒级别,测试centos确是支持的。
2.两个可以用来计算时间差的函数os.clock()和socket.gettime()。他们的不同之处在于os.clock()计算的是cpu在该程序中执行的时间,即进程睡眠的时间不会计算在os.clock()中。而socket.gettime()应该是获取的utc时间,它任何时间都在计数。因此要测试整个程序运行结束的时间,包括睡眠的时间的话使用socket.gettime()计算,反之使用os.clock()计算。
阅读(4341) | 评论(0) | 转发(0) |