当前位置: 首页 > wzjs >正文

购物网站建设工作流程发外链软件

购物网站建设工作流程,发外链软件,深圳大公司,推广图片大全【高心星出品】 文章目录 多线程Worker和Sendable的使用方法开发步骤运行结果 多线程Worker和Sendable的使用方法 Worker在HarmonyOS中提供了一种多线程的实现方式,它允许开发者在后台线程中执行长耗时任务,从而避免阻塞主线程并提高应用的响应性。 S…

【高心星出品】

文章目录

      • 多线程Worker和@Sendable的使用方法
        • 开发步骤
        • 运行结果

多线程Worker和@Sendable的使用方法

Worker在HarmonyOS中提供了一种多线程的实现方式,它允许开发者在后台线程中执行长耗时任务,从而避免阻塞主线程并提高应用的响应性。

@Sendable 注解主要用于标记那些需要在多线程环境中共享的数据对象或函数。被 @Sendable 标记的对象或函数可以在不同的线程之间高效地传输数据,这主要得益于 ArkTS 的序列化和反序列化机制。

开发步骤

【案例需求】 接下来要实现一个案例,创建两个子线程,一个子线程负责数据求和,一个子线程负责数据相减,UI线程提供共享数据给这两个子线程,子线程运行结果返回给UI线程。

  • 创建两个worker。

    在ets/下创建一个workers目录,在该目录下创建worker。这两个worker负责接受UI线程传过来的数据,并且负责子线程运行实体,并将结果发送给UI线程。

在这里插入图片描述

在这里插入图片描述

  • addworker的代码
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
import { Temp } from '../pages/Index';const workerPort: ThreadWorkerGlobalScope = worker.workerPort;/*** Defines the event handler to be called when the worker thread receives a message sent by the host thread.* The event handler is executed in the worker thread.** @param event message data*/
// 线程运行实体
function add(temp:Temp){let a=temp.alet b=temp.btemp.a+=5return a+b
}
// 子线程接受UI线程信息并处理
workerPort.onmessage = async (event: MessageEvents) => {if(event){// 模拟线程睡眠2sawait new Promise((resolve:(v:number)=>void)=>{setTimeout(()=>{resolve(10)},2000)})// 解析获取ui线程发送的数据let t=event.data as Temp// 子线程向UI线程发送消息workerPort.postMessage(add(t))}
};/*** Defines the event handler to be called when the worker receives a message that cannot be deserialized.* The event handler is executed in the worker thread.** @param event message data*/
workerPort.onmessageerror = (event: MessageEvents) => {
};/*** Defines the event handler to be called when an exception occurs during worker execution.* The event handler is executed in the worker thread.** @param event error message*/
workerPort.onerror = (event: ErrorEvent) => {
};
  • jianworker的代码
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
import { Temp } from '../pages/Index';const workerPort: ThreadWorkerGlobalScope = worker.workerPort;/*** Defines the event handler to be called when the worker thread receives a message sent by the host thread.* The event handler is executed in the worker thread.** @param event message data*/
// 线程运行实体
function jian(t:Temp){let a=t.alet b=t.bt.a-=5return Math.abs(a-b)
}
// 子线程接受UI线程的信息 并运行
workerPort.onmessage = async (event: MessageEvents) => {if(event){// 模拟线程睡眠2sawait new Promise((resolve:(v:string)=>void)=>{setTimeout(()=>{resolve('a')},2000)})let t=event.data as Temp// 向UI线程发送消息workerPort.postMessage(jian(t))}
};/*** Defines the event handler to be called when the worker receives a message that cannot be deserialized.* The event handler is executed in the worker thread.** @param event message data*/
workerPort.onmessageerror = (event: MessageEvents) => {
};/*** Defines the event handler to be called when an exception occurs during worker execution.* The event handler is executed in the worker thread.** @param event error message*/
workerPort.onerror = (event: ErrorEvent) => {
};
  • Index.ets代码
import { MessageEvents, worker } from "@kit.ArkTS";@Sendable
export class Temp {a: numberb: numberconstructor(a: number, b: number) {this.a = a;this.b = b;}
}
@Entry
@Component
struct Index {@State message: string = 'Hello World';// UI线程和其他两个子线程共享的数据private temp = new Temp(10, 20)//创建了两个线程private addthread = new worker.ThreadWorker('entry/ets/workers/addworker.ets')private jianthread = new worker.ThreadWorker('entry/ets/workers/jianworker.ets')aboutToAppear(): void {// UI线程中接受两个子线程发送的信息this.addthread.onmessage = (event: MessageEvents) => {console.log('gxxt add ', event.data as number)console.log('gxxt 当前的temp值: ',JSON.stringify(this.temp))}this.jianthread.onmessage = (event: MessageEvents) => {console.log('gxxt jian ', event.data as number)console.log('gxxt 当前的temp值: ',JSON.stringify(this.temp))}}build() {Column({ space: 20 }) {Button('加线程').width('60%').onClick(() => {this.addthread.postMessageWithSharedSendable(this.temp)})Button('减线程').width('60%').onClick(() => {this.jianthread.postMessageWithSharedSendable(this.temp)})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}
}

项目通过点击两个按钮启动两个线程,并将共享数据temp发送给两个子线程,两个子线程分别执行相加和相减,同时还更新共享数据的原始值,通过观察运算结果和共享数据的变化,我们能掌握worker的开发方式。

运行结果
02-28 09:10:59.798   3292-3292     A03d00/JSAPP     com.gxx.workdemo      I     gxxt add运算结果:  30
02-28 09:10:59.799   3292-3292     A03d00/JSAPP     com.gxx.workdemo      I     gxxt 当前的temp值:  {"a":15,"b":20}
02-28 09:11:04.877   3292-3292     A03d00/JSAPP     com.gxx.workdemo      I     gxxt jian运算结果  5
02-28 09:11:04.877   3292-3292     A03d00/JSAPP     com.gxx.workdemo      I     gxxt 当前的temp值:  {"a":10,"b":20}

刚一开始进行运算的时候add线程面对的a为10,b为20,计算结果为30,add线程同时a=a+5操作,所以此时UI线程得到的a为15;然后jian线程运行结果为|15-20|,jian线程同时a=a-5,所以此时UI线程得到的a为10.


文章转载自:

http://qznABs3e.Lwgrf.cn
http://zYLjMDtV.Lwgrf.cn
http://FL8qjla2.Lwgrf.cn
http://NwVpbN4m.Lwgrf.cn
http://7EjT6DNN.Lwgrf.cn
http://Rbl9tJ81.Lwgrf.cn
http://87gCjbuK.Lwgrf.cn
http://DRsIbrUy.Lwgrf.cn
http://A9hDsLNz.Lwgrf.cn
http://tsNOsKTQ.Lwgrf.cn
http://aIHd1iJ2.Lwgrf.cn
http://SJ1uscz0.Lwgrf.cn
http://uyMUs5BK.Lwgrf.cn
http://XriQS637.Lwgrf.cn
http://d3Pcf9gX.Lwgrf.cn
http://QdlgxJPy.Lwgrf.cn
http://scVzChaX.Lwgrf.cn
http://KYUqhG4T.Lwgrf.cn
http://puo0oRVs.Lwgrf.cn
http://kuPuFV2l.Lwgrf.cn
http://7Z6B1ym3.Lwgrf.cn
http://ZIpM0emT.Lwgrf.cn
http://xQomrAhw.Lwgrf.cn
http://tKL2fNOd.Lwgrf.cn
http://4wgeppSY.Lwgrf.cn
http://NF35izWj.Lwgrf.cn
http://kWj5BViD.Lwgrf.cn
http://A0kZG1vF.Lwgrf.cn
http://l63aiqR1.Lwgrf.cn
http://fJFAI2Ct.Lwgrf.cn
http://www.dtcms.com/wzjs/625568.html

相关文章:

  • 关于网站建设分类邢台发广告的平台有哪些
  • 惠安建设局网站网站备案号 放网站
  • 网站优化seo推广服务网站上面带官网字样怎么做的
  • 上海网站关键词优化方法引用网站资料怎么注明
  • 西凤九网站建设的目标wordpress可注册
  • php网站开发技术文档咸阳兼职做网站
  • 网站建设jwzcq网站开发文献综述范文
  • 孟州网站建设iis做的网站如何添加播放器
  • 商会建设网站说明qq群优惠券里面网站怎么做的
  • 做调查问卷网挣钱的网站电商网站销售数据分析
  • 数学教学网站开发网页升级访问中每天正常更新中
  • 设计网站注意哪些问题一线城市做网站工资有多少
  • 成功的网站建设网站建设及管理制度文章
  • 网站可信认证必须做上海比较有名的外贸公司
  • 杨园建设社区网站ks免费刷粉网站推广马上刷
  • 南通公司做网站建立网站要怎么做
  • 合肥做网站好的公司哪家好siteapp wordpress
  • 全国网站设计公司互联网网站类型
  • 电子商务网站如何推广山东网站备案注销申请表
  • 做淘宝网站用什么浏览器怎么创建邮箱地址
  • 百度地图网站开发泉州专业网站建设公司哪家好
  • html制作音乐网站代码少儿编程老师需要具备什么条件
  • 0731网站丽水专业网站建设哪家好
  • 制作一个网站多少钱啊做生产计划类的网站
  • 网站和微信订阅号优势用dw制作网站模板下载地址
  • 门户网站建设与运行情况良好网站备案单位的联系方式
  • 珠海网站设计公司客户管理系统服务
  • 广东手机网站建设报价360网页游戏大全
  • 企业网站备案需要多久深圳定制网站
  • 可以做公众号的一些网站网站开发哪里便宜