自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

OpenHarmony內(nèi)核編程接口—介紹線程管理與通用等待功能案例

系統(tǒng) OpenHarmony
Thread指在一個(gè)進(jìn)程(process)空間內(nèi),可以被操作系統(tǒng)單獨(dú)調(diào)度的運(yùn)行單位,與同一進(jìn)程的其他線程共享進(jìn)程的地址空間和運(yùn)行上下文。

想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

前言

本文介紹了內(nèi)核編程接口之線程和等待

線程管理

線程的概念和狀態(tài)

thread指在一個(gè)進(jìn)程(process)空間內(nèi),可以被操作系統(tǒng)單獨(dú)調(diào)度的運(yùn)行單位,與同一進(jìn)程的其他線程共享進(jìn)程的地址空間和運(yùn)行上下文。

ps: 在引入線程的操作系統(tǒng)中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位。

線程狀態(tài)大致分為五個(gè)狀態(tài):RUNNING,READY,BLOCKED,TERMINATED,INACTIVE。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

RUNNING:當(dāng)前正在運(yùn)行的線程處于RUNNING狀態(tài)需要注意的是一次只能有一個(gè)線程處于此狀態(tài)。

READY:準(zhǔn)備運(yùn)行的線程處于READY狀態(tài),一旦RUNNING線程終止或被BLOCKED,具有最高優(yōu)先級的下一個(gè)READY線程將成為RUNNING線程。

BLOCKED:被延遲,等待事件發(fā)生或掛起的線程處于BLOCKED狀態(tài)。

TERMINATED:調(diào)用osThreadTerminate接口時(shí),線程在資源尚未釋放的情況下被TERMINATED。

INACTIVE:未創(chuàng)建或已終止并釋放所有資源的線程處于INACTIVE狀態(tài)。

內(nèi)核編程的intelliSense設(shè)置

ps:因?yàn)樽髡咭呀?jīng)設(shè)置過includePath了,所以kernel\liteos_m\kal\cmsis\cmsis_os2.h下的頭文件沒有爆紅。

直接修改 .vscode\c_cpp_properties.json文件。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

輸入includePath即可,注意逗號。

"${workspaceFolder}/kernel/liteos_m/kal"
"${workspaceFolder}/kernel/liteos_m/kal/cmsis"
"${workspaceFolder}/device/hisilicon/hispark_pegasus/sdk_liteos/platform/os/Huawei_LiteOS/components/lib/libc/musl/arch/riscv32"

案例演示

準(zhǔn)備好開發(fā)套件。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

ps:目前osThreadDetach,osThreadJoin,osThreadEnumerate接口暫未實(shí)現(xiàn),案例沒有演示。

在源碼中查看接口詳細(xì)信息,根據(jù)路徑kernel\liteos_m\kal\cmsis\cmsis_os2.h 找到cmsis_os2.h文件。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

舉osThreadNew接口的例子,ctrl+f 輸入對你想要查看的接口名稱進(jìn)行搜索,可快速定位。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

根據(jù)路徑,新建文件:

  • applications\sample\wifi-iot\app\thread_demo\thread.c
  • applications\sample\wifi-iot\app\thread_demo\BUILD.gn

首先是頭文件。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

創(chuàng)建線程,返回線程id,封裝成一個(gè)函數(shù),便于調(diào)用。

osThreadId_t newThread(char *name, osThreadFunc_t func, void *arg)

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

創(chuàng)建一個(gè)線程測試函數(shù)。

線程名稱,狀態(tài)。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

創(chuàng)建主線程函數(shù)。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

線程的優(yōu)先級。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

掛起,恢復(fù)線程。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

線程??臻g大小,未使用棧空間大小。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

活躍線程數(shù),最后終止線程。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

定義此demo的入口函數(shù),最后別忘了使用宏 APP_FEATURE_INIT 讓入口函數(shù)執(zhí)行。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

修改腳本文件,注意文件路徑。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

編譯成功。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

燒錄成功。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

運(yùn)行成功。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

通用等待功能

時(shí)間管理

時(shí)間管理指內(nèi)核的時(shí)間管理模塊以系統(tǒng)時(shí)鐘為基礎(chǔ),給應(yīng)用程序提供所有和時(shí)間有關(guān)的服務(wù)。
系統(tǒng)時(shí)鐘:Tick或時(shí)標(biāo),由定時(shí)器或計(jì)數(shù)器產(chǎn)生的輸出脈沖觸發(fā)中斷產(chǎn)生的信號;OS會對Tick 計(jì)數(shù),一般定義為整數(shù)或長整數(shù);系統(tǒng)時(shí)鐘的絕對精度可達(dá)百萬分之50。

時(shí)鐘周期

時(shí)鐘周期指由定時(shí)器或計(jì)數(shù)器產(chǎn)生的輸出脈沖的周期,即兩個(gè)Tick間隔的時(shí)間長度。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

API接口介紹

osDelay,osDelayUntil,用到兩個(gè)內(nèi)核信息與控制的API(osKernelGetTickCount,osKernelGetTickFreq),主要介紹 osDelay 接口。

osDelay 顧名思義就是等待指定的Ticks,線程執(zhí)行完 osDelay 后,會從RUNNING狀態(tài)被LiteOS轉(zhuǎn)換為BLOCKED狀態(tài),在指定的Ticks到達(dá)后,線程會被LiteOS轉(zhuǎn)換為READY狀態(tài)。此時(shí)如果線程擁有最高優(yōu)先權(quán),它將被LiteOS立即調(diào)度也就是立即進(jìn)入RUNNING狀態(tài)。

osDelay(1) 等待下一個(gè)tick出現(xiàn),一定是等待一個(gè)cycle嗎,所以需要分情況討論。

ps:1cycle=10ms

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

案例演示

根據(jù)路徑,自行建立源碼文件和腳本文件:

  • applications\sample\wifi-iot\app\delay_demo\delay.c
  • applications\sample\wifi-iot\app\delay_demo\BUILD.gn

添加頭文件。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

創(chuàng)建主線程函數(shù)。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

創(chuàng)建入口函數(shù)。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

最后別忘了定義宏 APP_FEATURE_INIT運(yùn)行入口函數(shù)。

APP_FEATURE_INIT(DelayTestTask);

修改編譯腳本文件,注意編譯腳本路徑。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

編譯成功。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

燒錄成功。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

運(yùn)行成功。

【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)【OpenHarmony內(nèi)核編程接口】介紹線程管理與通用等待功能案例-開源基礎(chǔ)軟件社區(qū)

想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2023-08-02 09:26:03

軟件定時(shí)器鴻蒙

2022-03-28 14:23:26

HarmonyAI算法統(tǒng)一推理接口

2022-08-17 16:38:46

WLAN接口組件功能

2023-05-17 15:07:42

智能開發(fā)鴻蒙

2022-03-10 14:45:23

HarmonyAPI操作系統(tǒng)

2023-05-15 15:27:20

鴻蒙智能開發(fā)套件

2009-07-07 17:32:31

HTTP Servle

2011-07-22 14:55:20

多線程

2023-02-01 16:28:30

Linux內(nèi)核鴻蒙

2023-04-10 09:44:22

內(nèi)核鼠標(biāo)調(diào)試鴻蒙

2024-03-26 15:25:55

應(yīng)用接口文件轉(zhuǎn)換工具鴻蒙

2013-07-16 10:57:34

iOS多線程多線程概念多線程入門

2010-03-05 14:08:16

Android編程功能

2022-09-19 13:49:55

操作系統(tǒng)鴻蒙

2009-12-04 10:00:31

無線路由器功能介紹

2024-09-30 09:13:14

協(xié)調(diào)通信機(jī)制

2009-09-04 15:26:20

Windows 7編程

2023-08-18 14:28:18

UART異步通信

2011-08-16 16:14:07

IOS開發(fā)HTML5通用接口
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號