node.js — вызов функции C ++ v8 из рабочего веб-потока

Я создал рабочий поток в моем коде JavaScript. Я пытаюсь вызвать функцию C ++ из потока, используя node-gyp и V8. Но я не могу заставить его работать.

Вот код для hello.cc

#include <v8.h>

using namespace v8;
extern std::string myhello();
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("hello"));
}

void init(Handle<Object> exports) {
exports->Set(String::NewSymbol("hello"),
FunctionTemplate::New(Method)->GetFunction()
);
}

NODE_MODULE(hello, init)

А вот код для myhello.js

var addon = require('./build/Release/hello');
var thread = require('webworker-threads');

var t = thread.create();
console.log(t.eval("addon.hello()"));

Когда я бегу node myhello.js Я получаю следующий вывод

{ id: 0,
eval: [Function: eval],
load: [Function: load],
emit: [Function: emit],
emitSerialized: [Function: emitSerialized],
destroy: [Function: destroy],
on: [Function],
once: [Function],
removeAllListeners: [Function],
dispatchEvents: [Function],
_on: {} }

Я ожидаю, что «привет» будет напечатан на консоли.

Ценю любую помощь или указатели.

1

Решение

Я вижу 2 вопроса:

  1. t.eval возвращает сам поток (как вы можете видеть из вывода консоли). Результат выполнения кода передается в функцию обратного вызова, если он предоставляется
  2. Вам нужно требовать добавления внутри кода, который вы передаете eval, семантика замыкания здесь не работает. Но, похоже, это невозможно: требование не определено в контексте потоков. Я предполагаю, что это предназначено, чтобы предотвратить проблемы состояния гонки. Также см https://github.com/audreyt/node-webworker-threads/issues/15
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]