我正在尝试在我的c ++应用程序中保存JavaScript函数,并从另一个线程调用它。
但是我在Console.exe中的0x0101B5D5处得到了#34;未处理的异常:0xC0000005:访问冲突读取位置0x00000017。"
保存JavaScript函数(在requestCallbacks向量中):
Handle<Value> HttpEngine::addListener(const Arguments& args)
{
Locker locker;
HandleScope scope;
HttpEngine* pThis = UnwrapHttpEngine( args.This() );
Persistent<Function> callback = Persistent<Function>::New(Handle<Function>::Cast(args[0]));
pThis->requestCallbacks.push_back(*callback);
return Boolean::New(true);
}
尝试从另一个线程调用它:
void HttpEngine::emit()
{
Locker locker;
HandleScope scope;
for (size_t i = 0; i < requestCallbacks.size(); i++)
{
Persistent<Function> func = static_cast<Function*>(requestCallbacks[i]);
Handle<Value> args[1];
args[0] = v8::String::New("http://google.com");
func->Call(Context::GetCurrent()->Global(), 1, args);
}
}
JavaScript代码(其中httpEngine是全局范围内的c ++对象):
httpEngine.addListener(function (url) {
print('on request: ' + url);
});
答案 0 :(得分:0)
requestCallbacks
的类型是什么?尝试将Persistent<Function>
放在那里,而不是原始Function*
(在*
上使用Persistent
运算符既不受支持,也绝对不是您想要做的事情。< / p>