| Index: src/JsEngine.cpp | 
| =================================================================== | 
| --- a/src/JsEngine.cpp | 
| +++ b/src/JsEngine.cpp | 
| @@ -126,21 +126,27 @@ | 
| if (!arguments[0]->IsFunction()) | 
| throw std::runtime_error("First argument to setTimeout must be a function"); | 
| auto jsValueArguments = jsEngine->ConvertArguments(arguments); | 
| auto timerParamsID = jsEngine->StoreJsValues(jsValueArguments); | 
| std::weak_ptr<JsEngine> weakJsEngine = jsEngine; | 
| - jsEngine->platform.GetTimer().SetTimer(std::chrono::milliseconds(arguments[1]->IntegerValue()), [weakJsEngine, timerParamsID] | 
| - { | 
| - if (auto jsEngine = weakJsEngine.lock()) | 
| - jsEngine->CallTimerTask(timerParamsID); | 
| - }); | 
| + jsEngine->platform.WithTimer( | 
| + [arguments, weakJsEngine, timerParamsID](ITimer& timer) | 
| + { | 
| + timer.SetTimer( | 
| + std::chrono::milliseconds( | 
| + arguments[1]->IntegerValue()), [weakJsEngine, timerParamsID] | 
| + { | 
| + if (auto jsEngine = weakJsEngine.lock()) | 
| + jsEngine->CallTimerTask(timerParamsID); | 
| + }); | 
| + }); | 
| } | 
| void JsEngine::CallTimerTask(const JsWeakValuesID& timerParamsID) | 
| { | 
| auto timerParams = TakeJsValues(timerParamsID); | 
| JsValue callback = std::move(timerParams[0]); | 
| timerParams.erase(timerParams.begin()); // remove callback placeholder |