如何判断是否为主线程?

获取当前线程是否为主线程,类似于[NSThread isMainThread]。

HarmonyOS
2024-05-23 22:49:25
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
在攒六便士

主线程的线程号与进程号相同,在需要的地方判断当前的tid和pid是否相等即可。

获取当前线程/进程号

参考代码:

ArkTS侧:

import process from '@ohos.process'; 
  
function  isMainThread(): boolean { 
  return process.pid == process.tid 
}

Native侧:

#include <unistd.h> 
#include <thread> 
#include <sys/syscall.h> 
  
bool isMainThread() { 
    pid_t pid = getpid(); 
    pid_t tid = syscall(SYS_gettid); 
  
    if (pid == tid) { 
        return true; 
    } else { 
        return false; 
    } 
}

线程上限:

  • TaskPool:TaskPool自行管理生命周期,无需关心任务负载高低,TaskPool最多为cpu online个数 - 1,8核通常为7个,根据负载扩缩容,外部无法控制和超出,如果同时启用超过,则会等待。
  • Worker:开发者自行管理Worker的数量及生命周期,最多开启8个Worker,超出会报异常。
  • C++创建线程无数量限制。
分享
微博
QQ
微信
回复
2024-05-24 22:24:24
相关问题
如何判断当前线程是否主线程
2436浏览 • 1回复 待解决
怎样判断当前线程是否主线程
511浏览 • 1回复 待解决
异步是否主线程有影响
491浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
414浏览 • 1回复 待解决
TaskPool子线程主线程如何通信
2327浏览 • 1回复 待解决
HarmonyOS主线程线程切换问题
603浏览 • 1回复 待解决
TaskPool如何主线程进行通信
562浏览 • 1回复 待解决
HarmonyOS 主线程刷新UI
251浏览 • 1回复 待解决