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

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

Сообщение Anonymous »

У меня есть Node.js (v22 - я привязан к этой версии), встроенный в мое приложение и предоставляющий объект C++ его среде.
Моя настройка среды JS (на основе документации) выполняется в отдельном потоке, как и моя логика также выполняется в отдельном потоке.
Я могу прекрасно запускать приложение Node.js и даже вызывать методы 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-node-js-v8-environment[/url]
Ответить

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

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

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

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

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