如何在阻塞的nodejs中创建睡眠/延迟?

On3al

我目前正在尝试学习nodejs,而我正在做的一个小项目正在编写一个API,以控制一些联网的LED灯。

控制LED的微处理器具有处理延迟,我需要将发送给微控制器的命令间隔至少100毫秒。在C#中,我习惯于仅调用Thread.Sleep(time),但在node中没有找到类似的功能。

我已经找到了在节点中使用setTimeout(...)函数的几种解决方案,但是,这是异步的并且不会阻塞线程(这是我在此方案中需要的)。

有人知道阻塞睡眠或延迟功能吗?最好是一些不仅仅使CPU旋转并且具有+ -10毫秒精度的东西?

列昂尼德·贝斯卡斯特尼

最好的解决方案是为您的LED创建单例控制器,该控制器将排队所有命令并以指定的延迟执行它们:

function LedController(timeout) {
  this.timeout = timeout || 100;
  this.queue = [];
  this.ready = true;
}

LedController.prototype.send = function(cmd, callback) {
  sendCmdToLed(cmd);
  if (callback) callback();
  // or simply `sendCmdToLed(cmd, callback)` if sendCmdToLed is async
};

LedController.prototype.exec = function() {
  this.queue.push(arguments);
  this.process();
};

LedController.prototype.process = function() {
  if (this.queue.length === 0) return;
  if (!this.ready) return;
  var self = this;
  this.ready = false;
  this.send.apply(this, this.queue.shift());
  setTimeout(function () {
    self.ready = true;
    self.process();
  }, this.timeout);
};

var Led = new LedController();

现在您可以拨打电话Led.exec,它将为您处理所有延迟:

Led.exec(cmd, function() {
  console.log('Command sent');
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在QML中创建延迟功能?

来自分类Dev

如何在 JQuery 中为每个循环设置可变延迟/睡眠

来自分类Dev

向 nodejs 中的承诺数组添加延迟或睡眠

来自分类Dev

如何在ReactiveCocoa中的信号序列之间创建延迟?

来自分类Dev

如何在jQuery中创建链接的延迟动画序列?

来自分类Dev

如何在MOS 6502的asm中创建延迟

来自分类Dev

如何在C#中为命令创建延迟?

来自分类Dev

如何在 Azure Stream Analytics 中创建延迟滑动窗口

来自分类Dev

如何在不使用睡眠命令的情况下在 VB 中创建等待命令?

来自分类Dev

如何在Linux中显示进程状态(阻塞,非阻塞)

来自分类Dev

如何在Qt的工作线程中睡眠?

来自分类Dev

Swift 中的延迟/睡眠不起作用

来自分类Dev

如何在NodeJS中创建加密和解密功能?

来自分类Dev

如何在SEQUELIZE(nodeJS)中创建触发器?

来自分类Dev

如何在nodejs中对winston创建的日志文件进行存档?

来自分类Dev

在Rails中创建记录后如何延迟

来自分类Dev

如何在Rust中延迟创建其构造使用self的地图条目

来自分类Dev

如何在Laravel中失败的排队作业尝试之间创建延迟?

来自分类Dev

如何在Rails中创建延迟运行以间隔一年的时间?

来自分类Dev

在Blazor中延迟任务而不阻塞UI

来自分类Dev

如何在tcl脚本中插入30秒的睡眠?

来自分类Dev

如何在球拍中停止该睡眠程序

来自分类Dev

如何在Swift 2.2中睡眠几毫秒?

来自分类Dev

如何在Ubuntu中绝对关闭“显示睡眠”?

来自分类Dev

如何在深度睡眠中获取部分唤醒

来自分类Dev

如何在带有睡眠的PHP中显示几个网页?

来自分类Dev

如何在Ubuntu 18.04中禁用自动睡眠

来自分类Dev

NSTimer-如何在Swift中延迟

来自分类Dev

如何在Ruby中延迟循环?

Related 相关文章

  1. 1

    如何在QML中创建延迟功能?

  2. 2

    如何在 JQuery 中为每个循环设置可变延迟/睡眠

  3. 3

    向 nodejs 中的承诺数组添加延迟或睡眠

  4. 4

    如何在ReactiveCocoa中的信号序列之间创建延迟?

  5. 5

    如何在jQuery中创建链接的延迟动画序列?

  6. 6

    如何在MOS 6502的asm中创建延迟

  7. 7

    如何在C#中为命令创建延迟?

  8. 8

    如何在 Azure Stream Analytics 中创建延迟滑动窗口

  9. 9

    如何在不使用睡眠命令的情况下在 VB 中创建等待命令?

  10. 10

    如何在Linux中显示进程状态(阻塞,非阻塞)

  11. 11

    如何在Qt的工作线程中睡眠?

  12. 12

    Swift 中的延迟/睡眠不起作用

  13. 13

    如何在NodeJS中创建加密和解密功能?

  14. 14

    如何在SEQUELIZE(nodeJS)中创建触发器?

  15. 15

    如何在nodejs中对winston创建的日志文件进行存档?

  16. 16

    在Rails中创建记录后如何延迟

  17. 17

    如何在Rust中延迟创建其构造使用self的地图条目

  18. 18

    如何在Laravel中失败的排队作业尝试之间创建延迟?

  19. 19

    如何在Rails中创建延迟运行以间隔一年的时间?

  20. 20

    在Blazor中延迟任务而不阻塞UI

  21. 21

    如何在tcl脚本中插入30秒的睡眠?

  22. 22

    如何在球拍中停止该睡眠程序

  23. 23

    如何在Swift 2.2中睡眠几毫秒?

  24. 24

    如何在Ubuntu中绝对关闭“显示睡眠”?

  25. 25

    如何在深度睡眠中获取部分唤醒

  26. 26

    如何在带有睡眠的PHP中显示几个网页?

  27. 27

    如何在Ubuntu 18.04中禁用自动睡眠

  28. 28

    NSTimer-如何在Swift中延迟

  29. 29

    如何在Ruby中延迟循环?

热门标签

归档