Я использую v8 и spidermonkey из программ на C ++. В spidermonkey легко остановить выполнение, вы просто возвращаете FALSE в любом из собственных методов, реализованных в C ++.
Но я не вижу, как сделать то же самое в v8.
Handle<Value> enough(const v8::Arguments& a) {
// want to tell v8, that execution is not needed to continue.
return v8::Undefined();
}
Может быть, вернуть что-то конкретное, или установить некоторую переменную, или вызвать функцию v8, или отправить сообщение, или бросить и исключение, какая-нибудь идея?
Я не совсем уверен, что вы имеете в виду под «прерыванием» в данном случае. Но я дам ему попытку с моим ответом:
Вы можете либо вернуть значение из вашей функции C ++ на ранней стадии (return v8::False()
) пропустить выполнение другого кода внутри той же функции или вызвать исключение JavaScript с v8::ThrowException(...)
,
И вы можете использовать v8::V8::TerminateExecution()
, Это прервет выполнение в текущем изоляторе / потоке. Способ v8 делает это, генерируя неуловимое исключение (на земле JavaScript). Вы все еще можете использовать v8::TryCatch
обрабатывать завершение из вашего кода C ++.
Других решений пока нет …