如何维护V8上下文以备将来使用
How to maintain the V8 contexts for future use?
我需要在我的C代码中使用V8执行JavaScript。我的C应用程序访问Web服务器链接并获取HTML数据,图像和JavaScript。例如,我有2个JavaScript说JS1.JS和JS2.JS,如下所示。
JS1.JS
function js_add_elements(var1, var2)
{
var var3 = parseInt(var1) + parseInt(var2);
var result = 'Addition of ' + var1 + ' and ' + var2 + ' results ' + var3;
return result;
}
JS2.JS
js_add_elements(2, 3);
通常,我们需要很少的对象来在V8中运行JavaScript。我称其为"全局数据结构"中的一些上下文,我称其为实例。
Instance level contexts
std::unique_ptr<v8::Platform> platform;
v8::Isolate::CreateParams create_params;
v8::Isolate *isolate;
v8::Isolate::Scope *isolate_scope;
而且,我在下面的功能中保留了一些本地成员的上下文。
Local contexts in a function
v8::HandleScope handle_scope;
v8::Local<v8::Context> context;
v8::Context::Scope context_scope;
v8::Local<v8::String> source;
v8::Local<v8::Script> script;
保留上面的上下文,我可以运行js1.js和js2.js并获得所需的结果。说一段时间后,我从服务器中获得JS3.js,并显示下面的文件。
JS3.JS
js_add_elements(5, 6);
js_add_elements(7, 8);
现在问题开始了。我将尝试执行JS3.JS。到这个时候,在本地功能中声明的上下文已被删除(垃圾收集器(。当我尝试执行js3.js时,上下文将是新分配的,并且不会具有JS1.JS,因此结果 undefined 。
我希望应该有某种方法可以在一定时期内保持上下文的活力。我只是没有得到它。
有人可以帮助学习如何保持上下文的活力直到某些时间(例如,会议的一生(。
毗邻您存储的v8::Isolate
的位置,您应该能够将上下文存储在v8::Global
(因此v8::Global<v8::Context>
(中。
示例参见以下铬代码。
https://cs.chromium.org/chromium/src/extensions/renderer/script_context.h?l=254&amp;rcl = 6f4a318b668b668d531303276b6b6bac42424bac4bce999999999999911b>>
https://cs.chromium.org/chromium/src/extensions/renderer/script_context.cc?l=109&amp; amp;rcl = 6f4a318b668b668d531303276b6bac4242424bcc4bce999911b
- #为""定义宏;静态";针对不同的上下文
- 与互斥锁相比,旋转锁可以保证上下文切换
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 错误"Could not find Boost"(缺少:上下文标头)
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 使用 std::async 时死锁,将来作为成员
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 安排带有上下文的协同程序
- 我的文件无法正常工作,无法从C++文件中读取上下文
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- 具有std::initializer_list参数的非成员函数(/non构造函数上下文)的重载解析
- antlr 规则上下文是否可以独立于目标
- OpenGL 调试上下文警告 -"将使用视频内存作为缓冲区异议的来源
- SDL_ttf清除我之前和将来的所有渲染
- MSVC 在不知道类型的情况下评估上下文(和错误)
- 为什么 Perf 具有如此高的上下文切换?
- 如何维护V8上下文以备将来使用