LOADING

加载过慢请开启缓存 浏览器默认开启

openharmony用ubuntu编写线程

openharmony用ubuntu编写线程

完整代码

第一部分:代码结构

软件部分目录结构

thread_demo
├─ BUILD.gn
├─ thread_basic.c
└─ thread.c

我们打开文件
代码打开thread_basic.c

编译后会看到效果

可以看到是一直增加的

主要函数

头文件

// POSIX标准接口
#include <unistd.h>

// 用于初始化服务(services)和功能(features)
#include "ohos_init.h"

// CMSIS-RTOS API V2
// 是OpenHarmony的LiteOS_m内核与应用程序之间的抽象层。(LiteOS_m内核基于Cortex M系列芯片)
// 提供标准接口,便于应用程序移植来OpenHarmony,或者移植到其他支持CMSIS-RTOS API V2的系统。
// 头文件:kernel/liteos_m/kal/cmsis/cmsis_os2.h
// 源文件:kernel/liteos_m/kal/cmsis/cmsis_liteos2.c
#include "cmsis_os2.h"

创建一个线程,并将其加入活跃线程组中

osThreadNew((osThreadFunc_t)threadMain, NULL, &attr) 
osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)

// func 线程要运行的函数
// argument 指针,指向传递给线程函数的参数(可以是”xxxx”的形式)
// attr 线程属性(使用结构体)
// 注意:不能在中断服务调用该函数

//关于attr结构体
// 定义线程属性
osThreadAttr_t attr;
// 线程名
attr.name = "rtosv2_thread_main";
// 线程属性位
attr.attr_bits = 0U;
// 线程控制块的内存初始地址,默认为系统自动分配
attr.cb_mem = NULL;
// 线程控制块的内存大小
attr.cb_size = 0U;
// 线程栈的内存初始地址,默认为系统自动分配
attr.stack_mem = NULL;
// 线程栈的内存大小
attr.stack_size = 1024;
// 线程优先级,9(highest) - 38(lowest priority),默认为osPriorityNormal
// 位置:kernel\liteos_m\kal\cmsis\cmsis_os2.h
attr.priority = osPriorityNormal;

如果osThreadNew((osThreadFunc_t)threadMain, NULL, &attr)==NULL说明函数运行失败

读取当前线程ID

osThreadGetId();

参考用法

osThreadId_t tid = osThreadGetId();
printf("thread id: %p\r\n", tid);

读取当前线程名字

osThreadGetName(tid)

tid为线程ID
可以用上面的方法获取ID

得到线程的状态

osThreadGetState(tid)

tid为线程ID
可以用上面的方法获取ID

设置线程的优先级

osThreadSetPriority(tid, osPriorityNormal4);

tid为线程ID
可以用上面的方法获取ID
osPriorityNormal4为优先级
优先级有

osPriorityNormal        = 24,
osPriorityNormal1       = 24+1,
osPriorityNormal2       = 24+2,
osPriorityNormal3       = 24+3,
osPriorityNormal4       = 24+4,
osPriorityNormal5       = 24+5,
osPriorityNormal6       = 24+6,
osPriorityNormal7       = 24+7,

读取线程的优先级

osThreadGetPriority(tid);

tid为线程ID
可以用上面的方法获取ID

挂起线程

osThreadSuspend(tid);

也可以读取挂起情况

恢复线程

osThreadResume(tid);

得到线程的栈空间大小

osThreadGetStackSize(tid);

得到线程的未使用的栈空间大小

osThreadGetStackSpace(tid);

获取活跃线程数

osThreadGetCount();

终止线程

osThreadTerminate(tid);