tôi đã có thể biên dịch và liên kết V8 với trò chơi và diễn giải mã của tôi hoạt động tốt. Tuy nhiên, tôi muốn phân chia mã của mình và vòng lặp trò chơi nên tồn tại trong một luồng và công cụ kịch bản sẽ chạy trong luồng thứ hai cùng với vòng lặp trò chơi của tôi. Tôi đang sử dụng SDL và do đó đã thử mã này để tạo ra một luồng mới
SDL_CreateThread(ScriptingEngine::SpawnMain, NULL);
trong đó đoạn mã sau là công cụ kịch bản thử nghiệm của tôi:
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;
}
}
Tuy nhiên, tôi gặp lỗi như Access violation reading location 0x00000000.
trong api.cc
dòng 716 : i::Isolate* isolate = env->GetIsolate();
.
Có ai biết làm thế nào tôi có thể khắc phục điều này hoặc vấn đề chính xác là gì không?