在node.js中准确计时

时间:2014-02-12 15:40:16

标签: node.js timing beagleboneblack

我是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的方式。

感谢您的帮助!

1 个答案:

答案 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.');
};