【关键字】
Node-API / 线程安全开发 / napi_call_threadsafe_function / 跨线程获取数据
【问题描述】
项目中需要对接一个C++库,这个库的所有处理逻辑都在它的子线程里,并不在NAPI的主线程,因此涉及到跨线程的问题。假定主线程为线程A,三方库子线程为线程B。
1、调用napi_create_threadsafe_function方法,注入线程安全的方法callProxyFunction。该方法按照nodejs文档要求的方法签名,定义为static void callProxyFunction(napi_env env, napi_value js_callback, void *context, void *data)。其中第四个参数*data就是给调用该函数的地方植入自定义数据。
2、将第一步创建的callProxyFunction方法绑定到napi_threadsafe_function callProxySafeThreadHandle上。
3、在B线程中调用napi_call_threadsafe_function(callProxySafeThreadHandle, params, napi_tsfn_nonblocking),其中params参数就是植入自定义数据的地方。
4、A线程的callProxyFunction方法被napi主动调用。此时第四个参数*data,按照预想逻辑,应该可以获取第3步的params参数。实际上,经过调试地址确实是一样的,但是数据全部为空,似乎有跨线程问题。
因此想要咨询下,框架有没有提供什么方法可以获取第3步里传递的用户数据?
【解决方案】
经验证,可以跨线程获取数据,以下为示例代码。
-
hello.cpp:
#include "napi/native_api.h" #define LOG_TAG "testTag" #include <hilog/

文章讨论了如何在Node.js环境中通过napi_create_threadsafe_function实现线程安全地调用C++库,解决跨线程数据传递问题。作者分享了一个示例代码,展示了如何正确设置和调用线程安全函数以获取跨线程传递的用户数据。

1672

被折叠的 条评论
为什么被折叠?



