Node-API中的napi_call_threadsafe_function_with_priority接口的功能是从异步线程向ArkTS线程投递任务,底层队列会根据任务的优先级和入队方式来处理任务。
函数说明
napi_status napi_call_threadsafe_function_with_priority(napi_threadsafe_function func,
void *data,
napi_task_priority priority,
bool isTail);
参数 | 说明 |
---|---|
func | 线程安全方法 |
data | 异步线程期望传递给主线程的数据 |
priority | 指定任务的优先级 napi_task_priority |
isTail | 指定任务的入队方式, true代表任务从队列的尾部入队,false代表任务从队列的头部入队。 |
场景介绍
异步线程向ArkTS线程投递的任务需要根据任务指定的优先级和入队方式进行处理。
调用异步的ArkTS接口示例
示例代码
- 模块注册
// hello.cpp
#include "napi/native_api.h"
#include <string.h>
#include <stdlib.h>
struct CallbackData {
napi_threadsafe_function tsfn;
napi_async_work work;
};
// ArkTS线程的回调实现
static void CallJs(napi_env env, napi_value jsCb, void *context, void *data) {
if (env == nullptr) {
return;
}
napi_value resultNumber = nullptr;
napi_value undefined = nullptr;
napi_get_undefined(env, &undefined);
napi_value number1 = nullptr;
napi_create_int32(env, 12, &number1);
napi_value number2 = nullptr;
napi_create_int32(env, 15, &number2);
napi_value argv[2] = {number1, number2};
napi_call_function(env, undefined, jsCb, 2, argv, &resultNumber);
int32_t res = 0;
napi_get_value_int32(env, resultNumber, &a