Асинхронно работающий код C ++ и JS в V8 - PullRequest
1 голос
/ 07 сентября 2011

В настоящее время я экспериментирую с встраиванием V8 в мой проект.Так как я использую libev для прослушивания сокетов и событий и хочу иметь возможность создавать сценарии для событий с помощью JS, я хотел бы иметь возможность просто ненадолго запустить v8, а затем вернуться к C ++, чтобы проверить наличие событий и тому подобное, а затем вернуться назад.для запуска JS-кода.Поскольку я не делал много встраивания сценариев ранее, я уверен, что есть какой-то умный способ, которым это обычно делается, так что все идеи приветствуются.

1 Ответ

0 голосов
/ 13 сентября 2011

Самый простой способ сделать это - создать функции setTimeout и clearTimeout в JS.setTimeout создает ev::Timer, который имеет обратный вызов, который вызывается через определенное время.Это делает так, что когда вы вызываете функцию JS, вы продолжаете выполнять ее до тех пор, пока она не вернется, но эта функция может установить количество тайм-аутов, которые не вызываются до тех пор, пока вы не выйдете из текущего JS, и не произошло никаких другихсобытия во время выполнения, в этом случае они обрабатываются первыми (в C ++).Ограничения этого метода в том, что кодировщик, который пишет JS, должен помнить, что он не должен писать функции, которые входят в вечные циклы while или подобные.Вместо этого цикл делается так:

function repeat() { setTimeout(repeat, 0); }
...