c语言延时函数delay_JavaScript在nodejs中实现sleep休眠函数wait等待的方法

2022-07-27 08:19:26
8c7b4ce65366648aec3c5941831d4574.png

文章原发于个人主页:

JavaScript在nodejs中实现sleep休眠函数wait等待的方法www.bas369.com

参考文档:

js的休眠实现---sleep(): https://blog.csdn.net/lwh13794625320/article/details/53907842

JS实现停留几秒sleep,Js中for循环的阻塞机制,setTimeout延迟执行: https://blog.csdn.net/wz925552075/article/details/85926039

欢迎大家访问我的个人导航网站并且设置为主页:

巴士369,伴您到永久!https://www.bas369.com

1. 方法一:使用异步函数,setTimeout 函数await 实现代码的休眠暂停;

代码实现:

// 函数实现,参数单位 毫秒 ;
// 以下代码来自于互联网,具体出处已经不记得了;
function wait(ms) {
    return new Promise(resolve = >setTimeout(() = >resolve(), ms));
};

// 调用方法;
await wait(5000);

2. 方法二:同步函数,使用whlie(){} 或者for 实现死循环;缺点是cpu 占用率很高;

原理: 执行死循环,阻塞后续程序的执行,进而实现休眠的假象。

2.1.while 代码实现:

// 函数实现,参数 delay 单位 毫秒 ;
function sleep(delay) {
    var start = (new Date()).getTime();
    while ((new Date()).getTime() - start < delay) {
        // 使用  continue 实现;
        continue; 
    }
}

// 调用方法,同步执行,阻塞后续程序的执行;
sleep(5000);

或者

// 函数实现,参数 n 单位 毫秒 ;
function sleep ( n ) { 
    var start = new Date().getTime() ;
    while ( true ) {
        if ( new Date( ).getTime( ) - start > n ) {
            // 使用  break  实现;
            break;
        }
    }
}

// 调用方法,同步执行,阻塞后续程序的执行;
sleep(5000);

2.2.for 代码实现:

// 函数实现,参数 delay 单位 毫秒 ;
function sleep(delay) {
    for (var t = Date.now(); Date.now() - t <= delay;);
}

// 调用方法,同步执行,阻塞后续程序的执行;
sleep(5000);

3. 方法三:在node.js 平台调用 linux 系统自带的 sleep 函数;

参考文档:

Linux命令之sleep - 延迟指定时间:

https://www.linuxidc.com/Linux/2011-04/34758.htm

用途说明:sleep 命令常用于在Linux shell脚本中延迟时间;

常用方式如下, 注意:以下用法中的参数<n> 可以为小数;

格式: sleep ;

示例:

sleep s 延迟秒;

sleep m 延迟分钟;

sleep h 延迟小时;

sleep d 延迟天;

示例一

[root@www.linuxidc.com ~]# date; sleep 5; date

2011年 04月 17日 星期日 19:49:23 CST

2011年 04月 17日 星期日 19:49:28 CST

示例二

[root@www.linuxidc.com ~]# date; sleep 1.5m; date

2011年 04月 17日 星期日 19:50:06 CST

2011年 04月 17日 星期日 19:51:36 CST

  1. linux中sleep函数的使用和总结: https://www.cnblogs.com/wuyepeng/p/9789466.html
  2. bash之sleep函数: https://www.cnblogs.com/xiangzi888/archive/2012/03/21/2410448.html
  3. linux sleep函数: https://www.cnblogs.com/jkred369/p/4845923.html linux下还有个delay() 函数,原型为 extern void delay(unsigned int msec); 它可以延时msec*4 毫秒, 也就是如果想延时一秒钟的话,可以这么用delay(250) ;
  4. 关于Linux 中sleep()函数说明: https://blog.csdn.net/fly__chen/article/details/53175301
  5. Linux下的延迟函数sleep(): https://blog.csdn.net/nigulasi_dawei/article/details/72865390 在windows 系统下sleep(1000) 代表延迟 1 秒,因为sleep 的参数为毫秒 ; 而在Linux 系统下sleep 的参数为,所以延迟 1 秒 为sleep(1)

代码实现:

// 函数实现,参数单位 秒 ;
function wait(second) {
    // execSync 属于同步方法;异步方式请根据需要自行查询 node.js 的 child_process 相关方法;
    let ChildProcess_ExecSync = require('child_process').execSync;
    ChildProcess_ExecSync('sleep ' + second);
};

// 调用方法;休眠 60 秒,即 1 分钟;
wait( 60 );

4. 方法四:在node.js 平台调用shelljs 模块;

参考文档:

https://www.cnblogs.com/chenguiya/p/10960302.html

https://www.cnblogs.com/dashnowords/archive/2018/09/13/9632493.html

https://blog.csdn.net/weixin_33980459/article/details/91422235

https://www.w3cschool.cn/jhnpsm/1pbeqozt.html

https://blog.51cto.com/13869008/2173451

使用方法:

使用npm 安装 shelljs 模块,引用 shelljs:

let shelljs = require('shelljs');

执行命令:shelljs.exec(command,[, options][, callback]);

参数说明:

command: shell 命令;

async:是否异步执行,默认false,

如果存在 callback 回调函数,那么默认值为 true ;

slient:是否输出信息到 console,默认false;

encoding:默认utf8;

代码实现:

// 函数实现,参数单位 秒 ;
function wait(miao) {
    let shelljs = require('shelljs');
    shelljs.exec( "sleep" + " " + miao , { async : false } ) ;  
};

// 调用方法;休眠 60 秒,即 1 分钟;
wait( 60 );

5. 方法五:在node.js 平台调用sleep 模块;

参考文档:

node如何休眠几秒:

https://segmentfault.com/q/1010000007014431

5.1. 其他同类模块;

https://github.com/luciotato/waitfor

https://github.com/jmar777/suspend

https://github.com/creationix/gen-run

5.2.sleep模块使用方法;

sleep模块官网: https://www.npmjs.com/package/sleep

Linux 平台安装方法:

cd /home/test/桌面/node && sudo npm install sleep --save
cd /var/www/node && sudo npm install sleep --save

Windows 平台安装方法: 参考文档:

安装node-gyp: https://www. cnblogs.com/wangyuxue/p /11218113.html

先在控制台输入:

npm install --global --production windows-build-tools

安装的是:

1、python(v2.7 ,3.x不支持);

2、visual C++ Build Tools,或者 (vs2015以上(包含15));

3、.net framework 4.5.1 ;

就是安装的这三个东西,安装时间有点长,慢慢等;

然后在控制台输入:

npm install -g node-gyp

只需两部就安装好了,安装完成后查看,控制台输入:

node-gyp list

查看安装是否成功。

注意点,本人未测试,需要的同学可自行测试:
在node-gyp安装前,一定是有node.js的,而且一定是32位的,
如果你电脑是windows64位的,并且安装了64位的node.js,
那么粗暴的解决办法:直接在官网下载32位node,
然后点击下载文件进行安装,
安装的过程中提示你已经安装过了,
这时,你选择替换,
一路下一步就可以了。

最后再安装 sleep 模块依赖包:

cd /d C:Users%username%Desktopservernode && npm install sleep --save

使用方法:

var sleep = require( 'sleep' );
sleep.sleep(n): sleep for n seconds
sleep.msleep(n): sleep for n miliseconds
sleep.usleep(n): sleep for n microseconds (1 second is 1000000 microseconds)

代码实现:

使用方法:
// 参数单位为: 秒数 ;
function wait(haomiao) { 
    // 将毫秒参数,转换为 秒数 ;
    let miao = haomiao / 1000; 
    let sleep = require('sleep').sleep; 
    sleep(miao);

};

// 休眠 60 秒,即 1 分钟;范畴上属于同步方法;
wait(60000);

6. 方法六:使用 `Atomics.wait` 实现代码的 `同步` 休眠暂停;

// 函数实现,参数单位 毫秒 ;以下代码来自于互联网:https://segmentfault.com/a/1190000022113106 ;
var sharedArrayBuffer_for_sleep = new SharedArrayBuffer( 4 ) ;
var sharedArray_for_sleep = new Int32Array( sharedArrayBuffer_for_sleep ) ;
// 同步函数,睡眠 n 毫秒;
var sleep = function( n ) {
    Atomics.wait( sharedArray_for_sleep , 0 , 0 , n ) ;
}

// 调用方法;
sleep(5000);

以上是自己的资料总结。

  • 作者:weixin_39889788
  • 原文链接:https://blog.csdn.net/weixin_39889788/article/details/110617452
    更新时间:2022-07-27 08:19:26