小编The*_*per的帖子

V8多线程功能

我正在编写一个Node插件,我在尝试从C++工作线程调用V8函数对象时遇到问题.

我的插件基本上启动了一个C++ std :: thread并使用WaitForSingleOject()进入等待循环,这是由写入一些共享内存的不同C++应用程序(一个X-Plane插件)触发的.我试图让我的Node插件在发出Windows共享事件时唤醒,然后调用我从节点应用程序注册的JavaScript函数,该函数将依次将源自X-Plane的数据传递回Node和网络世界.

我已经设法解决了如何注册JavaScript函数并从C++调用它,但仅限于主V8线程.我似乎找不到从std :: thread调用函数的方法.

我尝试了各种方法,Locker对象(变量成功),持久性函数(不起作用),保存主隔离对象,进入/退出隔离,但是如果/当代码最终到达函数对象时它无效.

我得到了不同的结果,从崩溃到冻结,取决于我是否创建了各种储物柜和解锁器对象.

我对V8完全不熟悉,所以我不确定我做的是什么.有问题的代码如下:

如果有人能够提供帮助,我将永远感激不尽!

float* mem = 0;
HANDLE event = NULL;
Isolate* thisIsolate;

void readSharedMemory()
{
    //Isolate* isolate = Isolate::GetCurrent();
    //HandleScope scope(isolate);

    thisIsolate->Enter();
    v8::Locker locker(thisIsolate);
    v8::Isolate::Scope isolateScope(thisIsolate);
    //HandleScope scope(thisIsolate);        

    //v8::Local<Value> myVal = v8::String::NewFromUtf8(isolate, "Plugin world");
    v8::Local<Value> myVal = v8::Number::New(thisIsolate, *mem);

    // If it get's this far 'myFunction' is not valid
    bool isFun = myFunction->IsFunction();
    isFun = callbackFunction->IsFunction();

    v8::Context *thisContext = *(thisIsolate->GetCurrentContext());
    myFunction->Call(thisContext->Global(), 1, &(Handle<Value>(myVal)));
}

void registerCallback(const FunctionCallbackInfo<Value>& args)
{
    Isolate* …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading v8 node.js node.js-addon

3
推荐指数
1
解决办法
1900
查看次数

标签 统计

c++ ×1

multithreading ×1

node.js ×1

node.js-addon ×1

v8 ×1