Есть ли способ отправить параметры с моей предопределенной функцией napi_threadsafe_function?
У меня есть приложение Electron, я создал аддон, используя napi, и у меня есть функция javascript, которая обновляет пользовательский интерфейс на основе строкового входного параметра.
В аддоне я беру JS-функцию update UI и создаю для нее поточную функцию обратного вызова.
Затем я запускаю долго работающую функцию (с лямбда-выражением), которая в конечном итоге будет вызывать функцию безопасности потока для обновления пользовательского интерфейса. Я могу успешно вызвать функцию, но я не вижу способа передать параметры в вызов в это время.
Не буду комментировать слишком много того, что я уже пробовал, но чтение документации приводит меня к мысли, что это невозможно (так как в нем ничего не сказано). Экспериментирование с "материалом" в 4 созданных nullptr и вызове nullptr также не увенчалось успехом.
Но я чувствую, что это очень простая функция, которая должна быть выполнимой, надеюсь, я неправильно понимаю или упускаю что-то очевидное.
function addText(msg) {/*append stuff*/}
myModule.napiSomeFunc(addText)
//NAPI_CALL_WITH_CHECK is just a c++ macro i defined that just checks the status returned and handles it accordingly, I know it works fine.
napi_value napiSomeFunc(napi_env env, napi_callback_info cbinfo) {
//initial callback call setup
size_t argc = 1;
napi_value argv[1];
NAPI_CALL_WITH_CHECK(napi_get_cb_info, env, cbinfo, &argc, argv, nullptr, nullptr);
napi_value cb = argv[0]; // JS function
napi_value name;
NAPI_CALL_WITH_CHECK(napi_create_string_utf8, env, "testname", NAPI_AUTO_LENGTH, &name);
napi_threadsafe_function safecb;
NAPI_CALL_WITH_CHECK(napi_create_threadsafe_function,
env,
cb, // The JS function to callback to
NULL, // Optional async resource
name, // name for ^
0, // Maximum size of the queue. 0 for no limit.
1, // The initial number of threads, including the main thread, which will be making use of this function
nullptr, //optional data to pass down to function immediately below this
nullptr, // Optional function to call when the napi_threadsafe_function is being destroyed
nullptr, // Optional data to attach to the resulting napi_threadsafe_function
nullptr, // (call_js_cb) Optional callback which calls the JavaScript function in response to a call on a different thread
&safecb // Result
);
// Lambda runs at the end of this function
SuperLongRunningFunction(
"other params",
[safecb](const Result* res) {
string logText = "";
if (res) {
logText = "yay it worked";
} else {
logText = "oh no it failed";
}
// ** Send logText as input parameter somehow??? **
NAPI_EXTERN napi_status stat = napi_call_threadsafe_function(
safecb,
nullptr, // data to send into JS VIA call_js_cb
napi_tsfn_nonblocking
);
}
);
return nullptr;
}
В моем коде JavaScript у меня есть проверка на нулевой вызов входного параметра для функции, и я вижу, что в моих кликах я запускаю вызов без входов.
Мне нужно сделать вызов с logText в качестве ввода, но я не могу понять, как.
Любые толчки в правильном направлении будут с благодарностью. Благодарю.