[英]V8 communicating with busy script
通過v8,我正在運行javascript,它正在等待引擎端的輸入。 參見下面的簡化示例。 問題在於Run()處於阻塞狀態,並且標志從未設置為0。我還嘗試在新線程中執行Run(),結果是出現訪問沖突錯誤。
有沒有一種簡單的方法可以與正在運行的Javascript代碼進行通信? 如果需要單獨的線程,請問我缺少什么?
預先非常感謝您的幫助!
int flag = 1;
static void getFlag(v8::Local<v8::String> property,
const v8::PropertyCallbackInfo<v8::Value>& info) {
info.GetReturnValue().Set(flag);
}
...
objtemplate->SetAccessor(String::NewFromUtf8(isolate, "flag"), getFlag);
...
Handle<String> source = String::NewFromUtf8(isolate, "while(flag) { ... }");
Handle<Script> script = Script::Compile(source);
script->Run();
flag = 0;
這是我的多線程方法:
void runner(v8::Handle<v8::Script> * script) {
(*script)->Run();
}
CreateThread(0, 0, (LPTHREAD_START_ROUTINE) runner, (LPVOID) &script, 0, 0);
無需詳細說明為什么上述方法不起作用:您要實現的目標是JavaScript中的多線程。 那不存在。 JavaScript是設計上的單線程語言。 並發是異步的。 和其他所有JS VM一樣,V8是一個單線程引擎。 多個線程訪問同一隔離的唯一方法是通過全局mutax(請參閱Locker類)。
簡而言之,嘗試使用基於多線程的編程方法來處理JavaScript並不會幫助您。 這不是它的工作方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.