如何使用napi_create_threadsafe_function接口创建线程安全函数?

阅读 659
1 个回答

在C++代码中,首先获取传入的JavaScript回调函数(jsCb)和相关数据(CallbackData)。然后创建资源名称字符串,调用napi_create_threadsafe_function接口,传入环境、jsCbnullptr(可用于传递额外数据)、资源名称、参数数量、调用次数限制、上下文数据(CallbackData)、nullptr(可用于指定最终化回调函数)、nullptr(可用于指定释放上下文数据的回调函数)、CallJs回调函数(用于在JS线程执行异步回调)等参数,创建线程安全函数并获取函数对象,存储在CallbackData结构体中。示例代码如下:

struct CallbackData {
    napi_threadsafe_function tsfn;
    napi_async_work work;
};

static napi_value StartThread(napi_env env, napi_callback_info info) {
    size_t argc = 1;
    napi_value jsCb = nullptr;
    CallbackData *callbackData = nullptr;
    napi_get_cb_info(env, info, &argc, &jsCb, nullptr, reinterpret_cast<void **>(&callbackData));
    napi_value resourceName = nullptr;
    napi_create_string_utf8(env, "Thread-safe Function Demo", NAPI_AUTO_LENGTH, &resourceName);
    napi_create_threadsafe_function(env, jsCb, nullptr, resourceName, 0, 1, callbackData, nullptr,
        callbackData, CallJs, &callbackData->tsfn);
    //... 后续创建异步任务等操作
    return nullptr;
}

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进