我是node.js的新手,我正在尝试确定一个开关的开启和关闭事件之间经过的时间(使用BeagleBone Black),该脚本可以工作,有点使用.getTime()但是我读到它并不是特别准确。所以我做了一些研究并尝试使用console.time,但是从我读到的内容来看,没有办法将时间值导出到这个特定应用程序的变量中。
我正在尝试编写一个脚本,用于打开和关闭引擎的事件,因此准确性至关重要。唯一的输入是一个簧片开关,由一个连接到旋转飞轮的磁铁触发。
更简洁的是,有没有办法在node.js中准确地开启/关闭事件?
var b = require('bonescript');
b.pinMode('P8_19', b.INPUT);
b.pinMode('P8_17', b.OUTPUT);
b.pinMode('USR3', b.OUTPUT);
b.attachInterrupt('P8_19', true, b.CHANGE, interruptCallback);
var cycle = 0;
//var t = 0;
var start, end;
function interruptCallback() {
if (b.digitalRead('P8_19') == 1)
{
console.log('Magnetic field present!');
cycle=cycle+1;
console.log ('cycle: ' + cycle);
}
else
{
//console.time('t');
start = (new Date()).getTime();
}
//console.timeEnd('t');
//console.log(t);
end = (new Date()).getTime();
console.log('elapsed time: ' + (end - start));
}
这是我目前正在使用的完整代码。注意:我还展示了我尝试使用console.time的方式。
感谢您的帮助!
答案 0 :(得分:3)
要获得最准确的时间测量,请使用process.hrtime()
。来自文档:
以秒为单位返回当前的高分辨率实时 纳秒]元组数组。它相对于任意时间而言 过去。它与一天中的时间无关,因此不受影响 时钟漂移。主要用于测量两者之间的性能 间隔。
该函数返回一个包含秒数和纳秒数的双元素数组。将一个时间对象传递给另一个对象将返回两个对象之间的差异。
对于你的情况:
function interruptCallback() {
if (b.digitalRead('P8_19') == 1) {
cycle = cycle + 1;
} else {
start = process.hrtime();
}
end = process.hrtime(start);
console.log('elapsed time: ' end[0] + ' seconds and ' + end[1] + 'nanoseonds.');
};