2014-09-04 2 views
1

Я вызываю «Изолировать -> IdleNotification (100)» в пределах области выделения (через «v8 :: Изоляция :: Область ...»), и в какой-то момент, когда «V8: : GetCurrentPlatform() -> CallOnBackgroundThread (...) "вызывается внутри V8," V8 :: GetCurrentPlatform() "возвращает NULL, и все это умирает смертельной смертью. Любые идеи, почему текущая платформа может быть нулевой? Вернее, что нужно сделать, чтобы убедиться, что это не так? Все остальное, кажется, работает нормально.V8 «Платформа» имеет значение

Детали добавления: Я использую Visual Studio 2013 и скомпилировал исходный код, в результате библиотеки которого я использую оболочку V8.Net (в кодексе). Я бег следующего кода перед запуском на холостой ход вызова уведомления:

v8::Locker __lockScope(engine->Isolate()); 
v8::Isolate::Scope __isolateScope(engine->Isolate()); 
v8::HandleScope __handleScope(Isolate::GetCurrent()); 

Я пробовал разные комбинации, и, кажется, требуется только v8::Locker __lockScope, но платформа по-прежнему нулевая;

v8::Platform* V8::GetCurrentPlatform() { 
    DCHECK(platform_); // <-- 'platform_' is NULL 
    return platform_; 
} 

ответ

0

Получил эту работу вскоре после этого, но забыл опубликовать ответ. Вот он: Google изменил материал (сюрприз!: /), И теперь вам нужно сначала инициализировать платформу. Я сделал это, и все это работает снова:

v8::V8::InitializePlatform(v8::platform::CreateDefaultPlatform()); 
// Sets the v8::Platform to use. This should be invoked before V8 is initialized. 
v8::V8::InitializeICU(); 
// Initialize the ICU library bundled with V8. (if using the bundled ICU) 
v8::V8::Initialize(); 
// Initialize V8. 
Смежные вопросы