循环里面怎么加阻塞,类似thread.sleep(),settimeOut是不行的

循环里面怎么加阻塞,类似thread.sleep(),settimeOut是不行的

HarmonyOS
2024-05-10 22:30:20
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
你牙上有菜

简单一点时间要求不严格,可以使用下面方式:

function blockMainThread() { 
  console.log(‘Start blocking’); 
  const start = Date.now(); 
  while (Date.now() - start < 1000) { 
    // 空循环,等待 1 秒 
  } 
  console.log(‘End blocking’); 
} 
 
blockMainThread();

如果时间要求严格,可以使用c语言的方式:在ArkTS层要到达C/C层的sleep效果,思路如下:1.ArkTS层的while循环中调用与Native C层的接口,在C层通过sleep来完成该功能。

2.具体实现如下:

1)Arkts层的函数中,的代码如下: 
function CppSleep(): void { 
  let loop = 0; 
  while (loop < 2) { 
    loop; 
    hilog.info(0x0000, ‘testTag’, ‘loop3:%{public}d’, loop); 
    add(1, 2); 
    hilog.info(0x0000, ‘testTag’, ‘loop3 finish’); 
  } 
  hilog.info(0x0000, ‘testTag’, ‘end CppSleep’); 
} 
hilog.info(0x0000, ‘testTag’, ‘handle 5’); 
CppSleep(); 
2.创建的Native c模板中,在Native C的Add函数中,增加sleep处理,代码片段如下: 
#include <unistd.h> 
… 
static napi_value Add(napi_env env, napi_callback_info info) 
{ 
  … 
  sleep(2); 
  … 
} 
…
分享
微博
QQ
微信
回复
2024-05-11 11:28:03
相关问题
怎么给通知单击事件?
4790浏览 • 1回复 待解决
HarmonyOS有没类似Android里面的Fragment
14021浏览 • 4回复 待解决
HarmonyOS 字符串怎么手动换行?
503浏览 • 1回复 待解决
HarmonyOS 怎么和释放线程同步锁
485浏览 • 2回复 待解决
怎么获取List里面每个itemposition?
176浏览 • 1回复 待解决
怎么实现类似oc代理模式
349浏览 • 1回复 待解决
如何排查循环引用问题
336浏览 • 1回复 待解决
是否允许HAR循环依赖
1882浏览 • 1回复 待解决
ArkTs解决循环引用方式
2013浏览 • 1回复 待解决