HarmonyOS在C++线程上调用napi_create_ark_runtime,如何调用到js层的对象

在C++ 线程上调用napi_create_ark_runtime。C++ 线程上做数据回调,需要用到主线程创建的ts对象。现在不知道怎么在c++ 线程拿到这个ts对象。https://gitee.com/openharmony/docs/blob/0bb3eaccb8760c5515bfa3ffa82711f9be6f1338/zh-cn/application-dev/napi/use-napi-ark-runtime.md

这个文档,只描述了怎么在C++ 调用ts层的静态方法,没写怎么调用对象的方法。

HarmonyOS
2024-09-11 11:58:12
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
put_get

可参考以下实现:

// 子线程运行函数 
static void CallJs(napi_env env, napi_value js_cb, void *context, void *data) 
{ 
  // 获取引用值 
  napi_get_reference_value(env, cbObj, &js_cb); 
  // 创建一个ArkTS number作为ArkTS function的入参。 
  napi_value argv; 
  napi_create_int32(env, cValue, &argv); 
  napi_value result = nullptr; 
  napi_call_function(env, nullptr, js_cb, 1, &argv, &result); 
  napi_get_value_int32(env, result, &cValue); 
} 
// Native 主线程 
static napi_value ThreadsTest(napi_env env, napi_callback_info info) 
{ 
  // 从ArkTS侧获取的参数的数量 
  size_t argc = 1; 
  napi_value js_cb, work_name; 
  // 获取ArkTS参数 
  napi_get_cb_info(env, info, &argc, &js_cb, nullptr, nullptr); 
  // 指向napi_value js_cb 的 napi_ref cbObj 
  napi_create_reference(env, js_cb, 1, &cbObj); 
  // 通过UTF8编码的C字符串数据创建work_name 
  napi_create_string_utf8(env, “Work Item”, NAPI_AUTO_LENGTH, &work_name); 
  // 创建线程安全函数 
  napi_create_threadsafe_function(env, js_cb, NULL, work_name, 0, 1, NULL, NULL, NULL, CallJs, &tsfn); 
  // 其他线程中调用线程安全函数 
  std::thread t( { 
  // 可获取线程ID 
  std::thread::id this_id = std::this_thread::get_id(); 
  napi_acquire_threadsafe_function(tsfn); 
  napi_call_threadsafe_function(tsfn, NULL, napi_tsfn_blocking); 
}); 
  t.detach(); 
  return NULL; 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
分享
微博
QQ
微信
回复
2024-09-11 15:17:30
相关问题
HarmonyOS C++如何同步调用JS函数 -
805浏览 • 0回复 待解决
c/c++主动调用ArkTS存在问题
1653浏览 • 1回复 待解决
通过Native 调用c++实现文本绘制
1950浏览 • 1回复 待解决
HarmonyOS C++ 调用 ets 函数报错闪退
994浏览 • 1回复 待解决
NAPI线程调用TS线程函数
2456浏览 • 1回复 待解决
ArkTS通过接口访问C++对象
1232浏览 • 1回复 待解决