梅科尔工作室-HarmonyOS 内核开发_消息队列

Thread多线程

osThreadNew()函数osThreadNew通过将线程添加到活动线程列表并将其设置为就绪状态来启动线程函数。线程函数的参数使用参数指针*argument传递。当创建的thread函数的优先级高于当前运行的线程时,创建的thread函数立即启动并成为新的运行线程。线程属性是用参数指针attr定义的。属性包括线程优先级、堆栈大小或内存分配的设置。可以在RTOS启动(调用 osKernelStart)之前安全地调用该函数,但不能在内核初始化 (调用 osKernelInitialize)之前调用该函数。

梅科尔工作室-HarmonyOS 内核开发_同步操作_02

在Thread_example函数中,通过osThreadNew()函数创建了thread1和thread2两个进程,thread1和thread2启动后会输出打印日志。

定时器

描述:

梅科尔工作室-HarmonyOS 内核开发_消息队列_03

函数osTimerNew创建一个一次性或周期性计时器,并将其与一个带参数的回调函数相关联。计时器在osTimerStart启动之前一直处于停止状态。可以在RTOS启动(调用 osKernelStart)之前安全地调用该函数,但不能在内核初始化 (调用 osKernelInitialize)之前调用该函数。

梅科尔工作室-HarmonyOS 内核开发_消息队列_04

梅科尔工作室-HarmonyOS 内核开发_同步操作_05

梅科尔工作室-HarmonyOS 内核开发_事件处理_06

消息队列的概念:

消息队列,是一种常用于任务间通信的数据结构,实现了接收来自任务或中断的不固定长度的消息,并根据不同的接口选择传递消息是否存放在自己空间。任务能够从队列里面读取消息,当队列中的消息是空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。

用户在处理业务时,消息队列提供了异步处理机制,允许将一个消息放入队列,但并不立即处理它,同时队列还能起到缓冲消息作用。

梅科尔工作室-HarmonyOS 内核开发_同步操作_07

梅科尔工作室-HarmonyOS 内核开发_同步操作_08

梅科尔工作室-HarmonyOS 内核开发_消息队列_09

事件是一种实现任务间通信的机制,可用于实现任务间的同步,但事件通信只能是事件类型的通信,无数据传输。一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒任务进行事件处理。事件集合用32位无符号整型变量来表示,每一位代表一个事件。

多任务环境下,任务之间往往需要同步操作。事件可以提供一对多、多对多的同步操作。一对多同步模型:一个任务等待多个事件的触发;多对多同步模型:多个任务等待多个事件的触发。

任务可以通过创建事件控制块来实现对事件的触发和等待操作。LiteOS的事件仅用于任务间的同步,读事件时,可以根据入参事件掩码类型uwEventMask读 取事件的单个或者多个事件类型。事件读取成功后,如果 设置LOS_WAITMODE_CLR会清除已读取到的事件类型, 反之不会清除已读到的事件类型,需显式清除。可以通过 入参选择读取模式,读取事件掩码类型中所有事件还是读 取事件掩码类型中任意事件。

写事件时,对指定事件写入指定的事件类型,可以一次同时写多个事件类型。写事件会触发任务调度。 清除事件时,根据入参事件和待清除的事件类型,对事件 对应位进行清0操作。