v8 在 C++ 中从 nodejs 中提取全局对象
v8 extracting a global object from nodejs in C++
我使用“--shared”配置选项编译了 nodejs。在我的 C++ 代码中,我在节点中启动了一个脚本(在它自己的线程中):
node::Start(argc, argv);
我执行了以下 javascript 将对象放入全局 space :
global.someObject = new SomeObject;
我现在使用 C++(在另一个线程上)并且我想访问全局 "someObject"。我一直在考虑沿着这些方向使用代码,但是 isolate vairable 是 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"));
有任何指示或想法吗?
在 C++ 中如何从节点获取有效的隔离变量?
您需要从主线程运行 isolate->Exit()
并从另一个线程调用isolate->Enter()
。您还应该使用 v8::Locker 和 v8::Unlocker API。有一些例子 here.
我使用“--shared”配置选项编译了 nodejs。在我的 C++ 代码中,我在节点中启动了一个脚本(在它自己的线程中):
node::Start(argc, argv);
我执行了以下 javascript 将对象放入全局 space :
global.someObject = new SomeObject;
我现在使用 C++(在另一个线程上)并且我想访问全局 "someObject"。我一直在考虑沿着这些方向使用代码,但是 isolate vairable 是 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"));
有任何指示或想法吗? 在 C++ 中如何从节点获取有效的隔离变量?
您需要从主线程运行 isolate->Exit()
并从另一个线程调用isolate->Enter()
。您还应该使用 v8::Locker 和 v8::Unlocker API。有一些例子 here.