我能够将V8与我的游戏进行编译和链接,并且代码解释正常。但是我想划分代码,游戏循环应该在一个线程中存在,脚本引擎应该在游戏循环的第二个线程中运行。我正在使用SDL,因此尝试使用此代码生成新线程
SDL_CreateThread(ScriptingEngine::SpawnMain, NULL);
以下代码是我的测试脚本引擎:
namespace ScriptingEngine {
v8::HandleScope handleScope;
v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
v8::Persistent<v8::Context> context;
void Setup() {
// TODO: bind functions to global
// ...
context = v8::Context::New(NULL, global);
}
int SpawnMain(void *arguments) {
v8::Context::Scope scope(context);
v8::Handle<v8::Script> script = v8::Script::Compile(
v8::String::New("'Hello World'")
);
v8::Handle<v8::Value> result = script->Run();
context.Dispose();
return EXIT_SUCCESS;
}
}
不过,我得到一个错误,如Access violation reading location 0x00000000.
在api.cc
线路716 i::Isolate* isolate = env->GetIsolate();
。
有谁知道如何解决这个问题或确切的问题是什么?
+1以返回答案。您应该真正回答自己的问题,以便将其标记为已回答(S / O小组鼓励您尽可能回答自己的问题)。
—
乔纳森·迪金森
@JonathanDickinson:我没有足够的声誉,因此我被封锁了8个小时,直到我能够回答自己的问题为止。我明天会做;-)
—
Christian Ivicevic,2012年