HarmonyOS taskpool中执行任务时发送通知问题?

通过taskpoop执行一个任务,任务执行满足某个条件通过rxjs框架发送通知,订阅的位置收不到,不使用taskpoop就可以收到,为什么?是要做线程切换之类的吗?

阅读 516
1 个回答

taskpool 启动的是子线程有些操作无法执行的比如UI的更新,事件处理等操作,这些必须放在主线程。切换到主线程去发送通知,请参考如下demo:

import taskpool from '@ohos.taskpool';
import process from '@ohos.process';

//是否是主线程
function isMainThread(): boolean {
  return process.pid == process.tid
}

@Concurrent
function imageProcessing(dataSlice: ArrayBuffer): ArrayBuffer {
  return dataSlice;
}

function histogramStatistic(pixelBuffer: ArrayBuffer): void {
  let number: number = pixelBuffer.byteLength / 3;
  let buffer1: ArrayBuffer = pixelBuffer.slice(0, number);
  let buffer2: ArrayBuffer = pixelBuffer.slice(number, number * 2);
  let buffer3: ArrayBuffer = pixelBuffer.slice(number * 2);
  let group: taskpool.TaskGroup = new taskpool.TaskGroup();
  group.addTask(imageProcessing, buffer1);
  group.addTask(imageProcessing, buffer2);
  group.addTask(imageProcessing, buffer3);
  taskpool.execute(group, taskpool.Priority.HIGH).then((ret: Object) => {
    // 步骤3: 结果数组汇总处理
    if (isMainThread()) {
      console.log("打印成功")
    }
  })
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let buffer: ArrayBuffer = new ArrayBuffer(24);
            histogramStatistic(buffer);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进