HarmonyOS Sendable的类实例,在以下场景能否在多线程中共享

Sendable的类实例,在以下场景能否在多线程中共享

1、赋给静态全局变量

2、赋给非静态全局变量

3、赋给类静态/非静态成员变量

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

Sendable的类实例,在以下场景能在多线程中共享

1、赋给静态全局变量

2、赋给非静态全局变量

3、赋给类静态/非静态成员变量

// index.ets
import { taskpool } from '@kit.ArkTS';
import { testTypeA, testTypeB, Test } from './sendable'
import globalTest, { global } from './test';

@Concurrent
async function taskFunc1(testA: testTypeA) {
  console.info("test task res1 is: " + testA.name1);
}

@Concurrent
async function taskFunc2(testB: testTypeB) {
  console.info("test task res2 is: " + testB.name2);
}


@Concurrent
async function taskFunc3(test: Test) {
  console.info("test task res3 is: " + test.data1.name1);
}

@Concurrent
async function taskFunc4(testB: testTypeB) {
  console.info("test task res4 is: " + testB.name2);
}


function test1() {
  // 1.主线程设置非静态全局属性,子线程访问非静态全局属性
  let testA = new testTypeA()
  testA.name1 = globalTest.test3;
  let task: taskpool.Task = new taskpool.Task(taskFunc1, testA);
  taskpool.execute(task);
}

function test2() {
  // 2.主线程设置静态全局属性,子线程访问静态全局属性
  let testB = new testTypeB();
  testB.name2 = global.test2;
  let task: taskpool.Task = new taskpool.Task(taskFunc2, testB);
  taskpool.execute(task);
}

function test3() {
  // 3.主线程设置非静态类属性,子线程访问非静态类属性
  let test = new Test();
  let testA = new testTypeA();
  testA.name1 = "xxxxxx"
  test.data1 = testA;
  let task: taskpool.Task = new taskpool.Task(taskFunc3, test);
  taskpool.execute(task);
}

function test4() {
  let testB: testTypeB = new testTypeB();
  // 4.主线程设置静态类属性,子线程访问静态类属性
  testB.name2 = "yyyyyyy"
  let task: taskpool.Task = new taskpool.Task(taskFunc4, testB);
  taskpool.execute(task);
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          test1();
          test2();
          test3();
          test4();
        })
    }
    .height('100%')
    .width('100%')
  }
}
// sendable.ets
import globalTest, { global } from './test';

"use shared"

@Sendable
export class testTypeA {
  name1: string = globalTest.test3;
  constructor() {
  }
}

@Sendable
export class testTypeB {
  name2: string = global.test1;
  constructor() {
  }
}

@Sendable
export class Test {
  data1: testTypeA = new testTypeA();
  static data2: testTypeB;

  constructor() {
  }
}
// test.ets
export class global {
  static test1: string = "xbx1111"
  static test2: string = "xbx2222"
  test3: string = "xbx3333"
}

let globalTest = new global()
export default globalTest
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 多线程共享数据方法疑惑
56浏览 • 2回复 待解决
多线程中EGL如何共享Context
458浏览 • 1回复 待解决
如何实现多线程数据共享
2245浏览 • 1回复 待解决
getContext(this)能否自定义中使用
2309浏览 • 1回复 待解决
配置管理多线程方案
1891浏览 • 1回复 待解决
c++中实例化自定义并调用方法
346浏览 • 1回复 待解决