zoukankan      html  css  js  c++  java
  • js关于for循环实现线程休眠效果的问题

    因为对接集成硬件需要遇到需要在for循环中实现休眠效果,以前遇到过类似问题,当时想到用setTimeout发现js不支持会得到有意思的结果参考如下

    1 function test(){
    2         for(let i = 0; i<10; i++){
    3             setTimeout(function(){
    4                 console.log(i);
    5             },1000)
    6         }
    7         }

    执行后会是一秒后打印10个10,当时主要需要解决异步问题,后来用promise解决,但本次对接又无法修改硬件控件代码,在网上找到的方法如下

     1 //参数n为休眠时间,单位为毫秒:
     2         function sleep(n) {
     3             var start = new Date().getTime();
     4             //  console.log('休眠前:' + start);
     5             while (true) {
     6                 if (new Date().getTime() - start > n) {
     7                     break;
     8                 }
     9             }
    10             // console.log('休眠后:' + new Date().getTime());
    11         }

    在for循环中调用sleep可以实现休眠效果,但是会一直占用资源,后来想到用递归是不是也能实现类似的效果呢,代码如下

    1 // 调用时触发  初始值传参为0
    2 function test(i) {
    3             if (i < 10) {
    4                 console.log(i);
    5                 setTimeout(function() {
    6                     test(i + 1);
    7                 }, 1000)
    8             }
    9         }

    使用递归可以实现同样的效果,测试对cpu占用率也不高,对本次需求来说是较为好的解决方案。

  • 相关阅读:
    深入学习Make命令和Makefile(上)
    make命令
    ubuntu 重启网络方法--通过杀死进程重启网络
    悟空遥控器 --- 手机投屏到电视 播放视频
    组织结构图 --- 商务
    软件和数据库
    因果图---鱼骨图
    流程图 --- BPMN规范简介
    异次元软件
    Free Download Manager (FDM) 中文版
  • 原文地址:https://www.cnblogs.com/yanyunpiaomaio/p/13949758.html
Copyright © 2011-2022 走看看