В моем коде js есть глобальная переменная, и я пытаюсь установить для нее значение, отличное от c ++. Я пробовал:
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Local<v8::Context> ctx = isolate->GetCurrentContext();
v8::Local<v8::Value> value= WrapV8::NewString(isolate, "true");
ctx->Global()->Set(ctx, v8::String::NewFromUtf8(isolate, "globalVariable",
v8::NewStringType::kNormal).ToLocalChecked(), value);
Однако это не меняет глобальную переменную.
Большинство других примеров этого устарели и иногда устарели.
Мой c код:
void SignalHandler::intrpt(int signum) {
printf("callign intrpt");
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Local<v8::Context> context = isolate->GetCurrentContext();
v8::Local<v8::Value> boolC = WrapV8::NewString(isolate, "true");
context->Global()->Set(context, v8::String::NewFromUtf8(isolate, "ctrC", v8::NewStringType::kNormal).ToLocalChecked(),
boolC);
}
void SignalHandler::JsSetUpSignals(const v8::FunctionCallbackInfo<v8::Value>& args) {
v8::Isolate* isolate = args.GetIsolate();
v8::HandleScope handleScope(isolate);
v8::Local<v8::Context> context = isolate->GetCurrentContext();
v8::Local<v8::Value> val = v8::Number::New(isolate, 1);
(void)signal(SIGINT, intrpt);
printf("got here\n");
}
void SignalHandler::JsConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
if (WrappedObject::CallConstructor(args)) return;
v8::Isolate* isolate = args.GetIsolate();
SignalHandler* signalHandler = new SignalHandler();
signalHandler->wrap(isolate, args);
}
Мой JS код:
signal.startSignalWatching = () => {
var thread1 = new Thread(
() => {
SignalHandler = new internals.SignalHandler()
global.ctrC = false;
SignalHandler.setUpSignals()
waitTimer();
}
);
function waitTimer() {
if (global.ctrC != false) {
console.log("found it")
return;
} else {
console.log("waiting it", global.ctrC, Object.keys(global).length)
setTimeout(waitTimer, 800); // try again in 300 milliseconds
return;
}
}
Значение global.ctr C никогда не изменяется. global это список глобальных переменных. setTimeout является функцией от https://www.w3schools.com/jsref/met_win_settimeout.asp. Функция signal.startSignalWatching вызывает функцию из кода C ++ JsSetUpSignals (), в котором определены изолят и контекст.
В какой-то момент я знаю, что прерывание срабатывает, когда сообщение printf выводится на консоль.