代码之家  ›  专栏  ›  技术社区  ›  Matt

v8在C中从nodejs中提取全局对象++

  •  1
  • Matt  · 技术社区  · 8 年前

    我使用“-shared”配置选项编译了NodeJ。在我的C++代码中,我在node中启动了一个脚本(在它自己的线程中):

    node::Start(argc, argv);
    

    我已执行以下javascript将对象放入全局空间:

    global.someObject = new SomeObject;
    

    我现在在C++中(在另一个线程上),我想访问全局“someObject”。我一直在考虑使用这些代码,但是孤立变量为NULL:

         v8::Isolate*  isolate = v8::Isolate::GetCurrent();
         v8::HandleScope scope(isolate);
         auto context = isolate->GetCurrentContext(); // no longer crashes
         auto global_obj = context->Global();
         v8::Local<v8::Value> objinfo = global_obj->GetHiddenValue(v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), "someObject"));
    

    有什么建议或想法吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   tomerpacific    7 年前

    isolate->Exit() 从主线程调用 isolate->Enter() 从另一个线程。您还应该使用v8::Locker和v8::Unlocker API。这里有一些例子 here