Как вызвать JS-код из потока C++ во встроенной среде NodeJS/v8C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как вызвать JS-код из потока C++ во встроенной среде NodeJS/v8

Сообщение Anonymous »

У меня есть NodeJS (v22 – я привязан к этой версии), встроенный в мое приложение и предоставляющий объект C++ его среде.
Моя настройка среды JS (на основе https://nodejs.org/docs/latest-v22.x/api/embedding.html) выполняется в отдельном потоке, как и моя логика также выполняется в отдельном потоке.
Я могу запустить NodeJS приложение просто отлично и даже вызывает методы C++ из JS. Пока все хорошо.
Но мой код аварийно завершает работу, как только я пытаюсь вызвать функцию обратного вызова JS со стороны C++.
Я уже понял, что не могу получить доступ к структурам V8 из другого потока. Поэтому я реализовал очередь, которая гарантирует выполнение моего кода в потоке JS.
Вызовите «uv_async_init», чтобы зарегистрировать дескриптор «uv_aync_t». Когда я добавляю элемент очереди, я вызываю «uv_async_send», и вызывается моя функция обратного вызова.
(Добавление и извлечение очереди, конечно, защищено мьютексом)
В функции обратного вызова (ProcessMyQueue в стеке вызовов ниже) затем вызывается «MyEmitFunc», которая в основном делает следующее:

Код: Выделить всё

void MyEmitFunc(const std::string & someStringFromQueue) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Locker locker(isolate);
v8::Isolate::Scope isolateScope(isolate);
v8::Local s = v8::String::NewFromUtf8(isolate, someStringFromQueue.c_str()).ToLocalChecked();   // 

Подробнее здесь: [url]https://stackoverflow.com/questions/79813141/how-to-call-js-code-from-c-thread-in-embedded-nodejs-v8-environment[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»