HarmonyOS 鸿蒙Next如何在taskpool的线程调用成员函数

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next如何在taskpool的线程调用成员函数 如何在taskpool的线程调用成员函数

2 回复

当前使用存在限制:

  • 只能写在文件顶层
  • @Sendable只能标记class(不支持interface/enum)
  • @Sendable只能写在ArkTS(ets)文件中

成员属性值类型限制:

  • Sendable+string+number+boolean
  • (容器类预计0130支持:array,map,set等,待定)

不支持:

  • #定义私有属性,要用private
  • 计算属性

成员属性必须显式初始化
成员变量不能跟问号(?)和感叹号(!)
类函数不能访问闭包(只能访问 this、入参、import)

Sendable类只能被Sendable类继承
导出Sendable类的文件内,不能再导出非Sendable属性(string,number可以)

更多关于HarmonyOS 鸿蒙Next如何在taskpool的线程调用成员函数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,若想在taskpool的线程中调用成员函数,通常需要使用特定的机制来确保成员函数可以安全地被非成员函数指针(如taskpool任务)调用。以下是一个简要的方法来实现这一点:

  1. 使用静态成员函数作为任务:静态成员函数不依赖于类的实例,因此可以直接作为taskpool的任务。如果需要在静态成员函数中访问非静态成员变量或函数,可以通过将类实例的指针作为参数传递给静态成员函数。

  2. Lambda表达式:C++11及以后版本支持lambda表达式,它们可以捕获类的this指针,从而在lambda表达式内部调用成员函数。可以将这样的lambda表达式作为taskpool的任务。

  3. 使用std::bindstd::bind可以绑定成员函数和对象实例,生成一个可调用对象,这个对象可以作为taskpool的任务。

示例(使用lambda表达式):

class MyClass {
public:
    void MemberFunction() {
        // 函数实现
    }

    void StartTask() {
        taskpool_.PostTask([this]() {
            this->MemberFunction();
        });
    }

private:
    TaskPool taskpool_; // 假设TaskPool是taskpool的类型
};

上述代码展示了如何在StartTask方法中使用lambda表达式来调用MemberFunction。注意,这里假设TaskPool是taskpool的类型,并且PostTask方法接受一个可调用对象。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部