Index: src/GlobalJsObject.cpp |
=================================================================== |
--- a/src/GlobalJsObject.cpp |
+++ b/src/GlobalJsObject.cpp |
@@ -15,8 +15,9 @@ |
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
*/ |
+#include <stdexcept> |
+#include <thread> |
#include <vector> |
-#include <stdexcept> |
#include <AdblockPlus/JsValue.h> |
@@ -24,20 +25,18 @@ |
#include "ConsoleJsObject.h" |
#include "FileSystemJsObject.h" |
#include "GlobalJsObject.h" |
-#include "ConsoleJsObject.h" |
Eric
2016/12/07 18:06:25
Duplicated.
|
+#include "Scheduler.h" |
+#include "Utils.h" |
#include "WebRequestJsObject.h" |
-#include "Thread.h" |
-#include "Utils.h" |
using namespace AdblockPlus; |
namespace |
{ |
- class TimeoutThread : public Thread |
+ class TimeoutTask |
{ |
public: |
- TimeoutThread(JsValueList& arguments) |
- : Thread(true) |
+ TimeoutTask(JsValueList& arguments) |
{ |
if (arguments.size() < 2) |
throw std::runtime_error("setTimeout requires at least 2 parameters"); |
@@ -52,10 +51,9 @@ |
functionArguments.push_back(arguments[i]); |
} |
- void Run() |
- { |
- Sleep(delay); |
- |
+ void operator()() |
+ { |
+ std::this_thread::sleep_for(std::chrono::milliseconds(delay)); |
function->Call(functionArguments); |
} |
@@ -67,20 +65,20 @@ |
v8::Handle<v8::Value> SetTimeoutCallback(const v8::Arguments& arguments) |
{ |
- TimeoutThread* timeoutThread; |
+ std::shared_ptr<TimeoutTask> timeoutTask; |
try |
{ |
AdblockPlus::JsValueList converted = |
AdblockPlus::JsEngine::FromArguments(arguments) |
->ConvertArguments(arguments); |
- timeoutThread = new TimeoutThread(converted); |
+ timeoutTask = std::make_shared<TimeoutTask>(converted); |
} |
catch (const std::exception& e) |
{ |
v8::Isolate* isolate = arguments.GetIsolate(); |
return v8::ThrowException(Utils::ToV8String(isolate, e.what())); |
} |
- timeoutThread->Start(); |
+ Scheduler::StartImmediatelyInSingleUseThread(MakeHeapFunction(timeoutTask)); |
// We should actually return the timer ID here, which could be |
// used via clearTimeout(). But since we don't seem to need |