Моя настройка среды JS (на основе документации) выполняется в отдельном потоке, как и моя логика также выполняется в отдельном потоке.
Я могу прекрасно запускать приложение Node.js и даже вызывать методы C++ из JS. Пока все хорошо.
Но мой код аварийно завершает работу, как только я пытаюсь вызвать функцию обратного вызова JS со стороны C++.
Я уже понял, что не могу получить доступ к структурам V8 из другого потока. Поэтому я реализовал очередь, которая гарантирует выполнение моего кода в потоке JS.
Вызовите uv_async_init, чтобы зарегистрировать дескриптор uv_aync_t. Когда я добавляю элемент очереди, я вызываю uv_async_send, и вызывается моя функция обратного вызова.
(Добавление и извлечение очереди, конечно, защищено мьютексом.)
В функции обратного вызова (
Код: Выделить всё
ProcessMyQueueКод: Выделить всё
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]
Мобильная версия