色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙語言基礎類庫:ohos.worker 啟動一個Worker

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-07-11 17:03 ? 次閱讀

啟動一個Worker

說明: 本模塊首批接口從API version 7開始支持。后續版本的新增接口,采用上角標單獨標記接口的起始版本。 開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

Worker是與主線程并行的獨立線程。創建Worker的線程稱之為宿主線程,Worker自身的線程稱之為Worker線程。創建Worker傳入的url文件在Worker線程中執行,可以處理耗時操作但不可以直接操作UI。

導入模塊

import worker from '@ohos.worker';

屬性

系統能力: 以下各項對應的系統能力均為SystemCapability.Utils.Lang。

名稱參數類型可讀可寫說明
parentPort[DedicatedWorkerGlobalScope]worker線程用于與宿主線程通信的對象。

WorkerOptions

Worker構造函數的選項信息,用于為Worker添加其他信息。

系統能力: 以下各項對應的系統能力均為SystemCapability.Utils.Lang。

名稱參數類型可讀可寫說明
type"classic"按照指定方式執行腳本。
namestringWorker的名稱。

Worker

使用以下方法前,均需先構造Worker實例,Worker類繼承[EventTarget]。

constructor

constructor(scriptURL: string, options?: WorkerOptions)

Worker構造函數。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
scriptURLstringWorker執行腳本的url,路徑規范:若DevEco新建工程在pages同級下沒有workers目錄,需要新建workers目錄,將腳本文件放入workers目錄。
options[WorkerOptions]Worker構造的選項。

返回值:

類型說明
Worker執行Worker構造函數生成的Worker對象,失敗則返回undefined。

示例:

const workerInstance = new worker.Worker("workers/worker.js", {name:"first worker"});

postMessage

postMessage(message: Object, options?: PostMessageOptions): void

向Worker線程發送消息,數據的傳輸采用結構化克隆算法

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
messageObject發送至Worker的數據。
options[PostMessageOptions]可轉移對象是 ArrayBuffer 的實例對象。transferList數組中不可傳入null。

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.postMessage("hello world");
const workerInstance= new worker.Worker("workers/worker.js");
var buffer = new ArrayBuffer(8);
workerInstance.postMessage(buffer, [buffer]);

on

on(type: string, listener: EventListener): void

向Worker添加一個事件監聽。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
typestring監聽事件的type。
listener[EventListener]回調的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.on("alert", (e)= >{
    console.log("alert listener callback");
})

once

once(type: string, listener: EventListener): void

向Worker添加一個事件監聽,事件監聽只執行一次便自動刪除。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
typestring監聽事件的type。
listener[EventListener]回調的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.once("alert", (e)= >{
    console.log("alert listener callback");
})

off

off(type: string, listener?: EventListener): void

刪除Worker的事件監聽。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
typestring需要刪除事件的type。
listener[EventListener]需要刪除的回調的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.off("alert");

terminate

terminate(): void

關閉Worker線程,終止Worker接收消息。

系統能力: SystemCapability.Utils.Lang

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.terminate()

onexit

onexit?: (code: number) => void

Worker對象的onexit屬性表示Worker退出時被調用的事件處理程序,處理程序在宿主線程中執行。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
codenumberWorker退出的code。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onexit = function(e) {
    console.log("onexit")
}

onerror

onerror?: (err: ErrorEvent) => void

Worker對象的onerror屬性表示Worker在執行過程中發生異常被調用的事件處理程序,處理程序在宿主線程中執行。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
err[ErrorEvent]異常數據。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onerror = function(e) {
    console.log("onerror")
}

onmessage

onmessage?: (event: MessageEvent) => void

Worker對象的onmessage屬性表示宿主線程接收到來自其創建的Worker通過parentPort.postMessage接口發送的消息時被調用的事件處理程序,處理程序在宿主線程中執行。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
event[MessageEvent]收到的Worker消息數據。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onmessage = function(e) {
    console.log("onerror")
}

onmessageerror

onmessageerror?: (event: MessageEvent) => void

Worker對象的onmessageerror屬性表示當Worker對象接收到一條無法被序列化的消息時被調用的事件處理程序,處理程序在宿主線程中執行。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
event[MessageEvent]異常數據。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onmessageerror= function(e) {
    console.log("onmessageerror")
}

EventTarget

addEventListener

addEventListener(type: string, listener: EventListener): void

向Worker添加一個事件監聽。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
typestring監聽事件的type。
listener[EventListener]回調的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.addEventListener("alert", (e)= >{
    console.log("alert listener callback");
})

removeEventListener

removeEventListener(type: string, callback?: EventListener): void

刪除Worker的事件監聽。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
typestring需要刪除事件的type。
callback[EventListener]需要刪除的回調的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.removeEventListener("alert")

dispatchEvent

dispatchEvent(event: Event): boolean

分發定義在Worker的事件。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
event[Event]需要分發的事件。

返回值:

類型說明
boolean分發的結果,false表示分發失敗。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.dispatchEvent({type:"alert"})

removeAllListener

removeAllListener(): void

刪除Worker的所有事件監聽。

系統能力: SystemCapability.Utils.Lang

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.removeAllListener({type:"alert"})

DedicatedWorkerGlobalScope

Worker線程用于與宿主線程通信的類,通過postMessage接口發送消息給宿主線程、close接口關閉Worker線程,DedicatedWorkerGlobalScope類繼承[WorkerGlobalScope]。

postMessage

postMessage(message: Object, options?: PostMessageOptions): void

Worker向宿主線程發送消息。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
messageObject發送至Worker的數據。
options[PostMessageOptions]可轉移對象是ArrayBuffer的實例對象。transferList數組中不可傳入null。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.postMessage("hello world")
workerInstance.onmessage = function(e) {
    console.log("receive data from worker.js")
}
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessage = function(e){
    parentPort.postMessage("receive data from main.js")
}

close

close(): void

關閉Worker線程,終止Worker接收消息。

系統能力: SystemCapability.Utils.Lang

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
    parentPort.close()
}

onmessage

onmessage?: (event: MessageEvent) => void

DedicatedWorkerGlobalScope的onmessage屬性表示Worker線程收到來自其宿主線程通過worker.postMessage接口發送的消息時被調用的事件處理程序,處理程序在Worker線程中執行。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
event[MessageEvent]收到的Worker消息數據。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.postMessage("hello world")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
    console.log("receive main.js message")
}

onmessageerror

onmessageerror?: (event: MessageEvent) => void

DedicatedWorkerGlobalScope的onmessageerror屬性表示當Worker對象接收到一條無法被反序列化的消息時被調用的事件處理程序,處理程序在Worker線程中執行。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
event[MessageEvent]異常數據。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessageerror= function(e) {
    console.log("worker.js onmessageerror")
}

PostMessageOptions

明確數據傳遞過程中需要轉移所有權對象的類,傳遞所有權的對象必須是ArrayBuffer。

系統能力: 以下各項對應的系統能力均為SystemCapability.Utils.Lang。

名稱參數類型可讀可寫說明
transferObject[]ArrayBuffer數組,用于傳遞所有權。

Event

事件類。

系統能力: 以下各項對應的系統能力均為SystemCapability.Utils.Lang。

名稱參數類型可讀可寫說明
typestring指定事件的type。
timeStampnumber事件創建時的時間戳(精度為毫秒)。

EventListener

事件監聽類。

(evt: Event): void | Promise

執行的回調函數。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
evt[Event]回調的事件類。

返回值:

類型說明
voidPromise

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.addEventListener("alert", (e)= >{
    console.log("alert listener callback");
})

ErrorEvent

錯誤事件類,用于表示Worker執行過程中出現異常的詳細信息,ErrorEvent類繼承[Event]。

系統能力: 以下各項對應的系統能力均為SystemCapability.Utils.Lang。

名稱參數類型可讀可寫說明
messagestring異常發生的錯誤信息。
filenamestring出現異常所在的文件。
linenonumber異常所在的行數。
colnonumber異常所在的列數。
errorObject異常類型。

MessageEvent

消息類,持有Worker線程間傳遞的數據。

系統能力: 以下各項對應的系統能力均為SystemCapability.Utils.Lang。

名稱參數類型可讀可寫說明
dataT線程間傳遞的數據。

WorkerGlobalScope

Worker線程自身的運行環境,WorkerGlobalScope類繼承[EventTarget]。

屬性

系統能力: 以下各項對應的系統能力均為SystemCapability.Utils.Lang。

QQ截圖20240705210937.png

名稱參數類型HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿可讀可寫說明
namestringWorker的名字,有new Worker時指定。
self[WorkerGlobalScope] & typeof globalThisWorkerGlobalScope本身。

onerror

onerror?: (ev: ErrorEvent) => void

WorkerGlobalScope的onerror屬性表示Worker在執行過程中發生異常被調用的事件處理程序,處理程序在Worker線程中執行。

系統能力: SystemCapability.Utils.Lang

參數:

參數名類型必填說明
ev[ErrorEvent]異常數據。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort
parentPort.onerror = function(e){
    console.log("worker.js onerror")
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Worker
    +關注

    關注

    0

    文章

    8

    瀏覽量

    6476
  • 鴻蒙
    +關注

    關注

    57

    文章

    2392

    瀏覽量

    42980
收藏 人收藏

    評論

    相關推薦

    鴻蒙OS開發案例:【ArkTS多線程CPU密集型任務Worker

    通過某地區提供的房價數據訓練簡易的房價預測模型,該模型支持通過輸入房屋面積和房間數量去預測該區域的房價,模型需要長時間運行,房價預測需要使用前面的模型運行結果,因此需要使用Worker
    的頭像 發表于 04-01 21:55 ?1176次閱讀
    <b class='flag-5'>鴻蒙</b>OS開發案例:【ArkTS<b class='flag-5'>類</b><b class='flag-5'>庫</b>多線程CPU密集型任務<b class='flag-5'>Worker</b>】

    ArkTS語言基礎-解析

    被設計用來傳輸和存儲數據,是種可擴展標記語言語言基礎提供了[XML生成、解析與轉換]的能力。 URL、URI構造和解析能力:其中[U
    發表于 02-20 16:44

    鴻蒙原生應用開發-ArkTS語言基礎概述

    擴展標記語言語言基礎提供了XML生成、解析與轉換的能力。 URL、URI構造和解析能力:其中URI是統資源標識符,可以唯
    發表于 03-05 15:42

    鴻蒙原生應用開發-ArkTS語言基礎多線程TaskPool和Worker的對比(

    TaskPool(任務池)和Worker的作用是為應用程序提供多線程的運行環境,用于處理耗時的計算任務或其他密集型任務。可以有效地避免這些任務阻塞主線程,從而最大化系統的利用率,降低整體資源消耗
    發表于 03-25 14:11

    鴻蒙原生應用開發-ArkTS語言基礎多線程TaskPool和Worker的對比(二)

    易用,支持任務的執行、取消。工作線程數量上限為4。 Worker運作機制 圖2 Worker運作機制示意圖 創建Worker的線程稱為宿主線程(不定是主線程,工作線程也支持創建
    發表于 03-26 15:25

    鴻蒙原生應用開發-ArkTS語言基礎多線程TaskPool和Worker的對比(三)

    import worker from \'@ohos.worker\'; // 寫法 // Stage模型-目錄同級(entry模塊下,workers目錄與pages目錄同級) const
    發表于 03-27 16:26

    HarmonyOS CPU與I/O密集型任務開發指導

    。 基于多線程并發機制處理CPU密集型任務可以提高CPU利用率,提升應用程序響應速度。 當進行系列同步任務時,推薦使用Worker;而進行大量或調度點較為分散的獨立任務時,不方便使用8Wo
    發表于 09-26 16:29

    HarmonyOS語言基礎開發指南上線啦!

    語言基礎提供哪些功能?多線程并發如何實現?TaskPool(任務池)和Worker在實現和使用場景上有何不同? 針對開發者關注的并發等語言
    發表于 10-18 16:36

    面向對象嵌入式實時操作系統Worker1.0

    Worker1.0繼承圖1 Worker1.0主要的簡介3 Worker1.0 API4 Worker1.0移植9
    發表于 04-29 18:01 ?39次下載
    面向對象嵌入式實時操作系統<b class='flag-5'>Worker</b>1.0

    normal worker_pool詳細的創建過程代碼分析

    默認 work 是在 normal worker_pool 中處理的。系統的規劃是每個 CPU 創建兩 normal worker_pool:
    的頭像 發表于 04-08 14:35 ?7488次閱讀
    normal <b class='flag-5'>worker</b>_pool詳細的創建過程代碼分析

    Tokio中hang死所有worker的方法

    原因是 tokio 里的待執行 task 不是簡單的放到 queue 里,除了 runtime 內共享的,可被每個 worker 消費的run_queue[2],每個 worker
    的頭像 發表于 02-03 16:26 ?1011次閱讀

    HarmonyOS語言基礎開發指南上線啦!

    語言基礎提供哪些功能?多線程并發如何實現?TaskPool(任務池)和Worker在實現和使用場景上有何不同? 針對開發者關注的并發等語言
    的頭像 發表于 10-18 16:20 ?617次閱讀
    HarmonyOS<b class='flag-5'>語言</b>基礎<b class='flag-5'>類</b><b class='flag-5'>庫</b>開發指南上線啦!

    鴻蒙APP開發:【ArkTS多線程】TaskPool和Worker的對比

    TaskPool(任務池)和Worker的作用是為應用程序提供多線程的運行環境,用于處理耗時的計算任務或其他密集型任務。可以有效地避免這些任務阻塞主線程,從而最大化系統的利用率,降低整體資源消耗,并提高系統的整體性能。
    的頭像 發表于 03-26 22:09 ?694次閱讀
    <b class='flag-5'>鴻蒙</b>APP開發:【ArkTS<b class='flag-5'>類</b><b class='flag-5'>庫</b>多線程】TaskPool和<b class='flag-5'>Worker</b>的對比

    鴻蒙APP開發:【ArkTS多線程】TaskPool和Worker的對比(2)

    創建Worker的線程稱為宿主線程(不定是主線程,工作線程也支持創建Worker子線程),Worker自身的線程稱為Worker子線程(或
    的頭像 發表于 03-27 15:44 ?563次閱讀
    <b class='flag-5'>鴻蒙</b>APP開發:【ArkTS<b class='flag-5'>類</b><b class='flag-5'>庫</b>多線程】TaskPool和<b class='flag-5'>Worker</b>的對比(2)

    鴻蒙語言基礎ohos.bytrace 性能打點

    用來標記預追蹤的數值變量,該變量的數值會不斷變化。
    的頭像 發表于 07-18 15:41 ?303次閱讀
    主站蜘蛛池模板: 久久成人永久免费播放 | 人妻激情综合久久久久蜜桃 | 成年人国产视频 | 成人在线高清不卡免费视频 | 青娱国产区在线 | 野花日本免费完整版高清版动漫 | 成人在免费视频手机观看网站 | 久久精品国产只有精品 | 果冻传媒 在线播放观看 | 欧美午夜精品久久久久久浪潮 | 国语自产二区高清国语自产拍 | 亲胸吻胸添奶头GIF动态图免费 | 国产小视频免费在线观看 | 高清日本片免费观看 | 久久婷婷电影网 | 亚洲综合AV色婷婷五月蜜臀 | 男人免费网站 | 福利社影院 | 亚洲精品国产高清不卡在线 | 国产午夜精品理论片影院 | 米奇影视999 | 亚洲AV精品无码喷水直播间 | a视频在线免费观看 | 亚州三级视频 | 色偷偷网址 | 国产亚洲人成网站在线观看播放 | 九九热在线视频 | 久久精品电影院 | 天美传媒MV高清免费看 | 高清 国产 在线 亚洲 | 成人中文在线 | av在线不卡中文网 | 亚洲嫩草影院久久精品 | 免费观看a视频 | 嫩小幼处在线 | 在线亚洲国产日韩欧洲专区 | 久久亚洲这里只有精品18 | 野花香在线观看免费高清播放视频 | 2020最新无码国产在线视频 | 国产普通话精品久久 | 国产精品久久久久久久久99热 |