я реализовал класс Thread в JS похож на класс Thread в .net/C#:блокирование 'Join' метод на html5 WebWorker
function Thread(func) {
var o = this;
o.func = func;
}
Thread.prototype.Start = function (p, cb) {
var o = this;
var toClass = {}.toString;
var wcode = "" + o.func;
var re = /\((.*?)\)/;
var rearr = re.exec(wcode)[1].split(",");
var odta = {};
var tobj = [];
var pstr = "";
for (var i = rearr.length - 1; i >= 0; i--)
{
odta[rearr[i]] = p ? p[i] : p;
pstr += rearr[i] + "=" + rearr[0] + ".data." + rearr[i] + ";";
if (p && p[i] && (toClass.call(p[i]) == "[object ArrayBuffer]")) {
// tobj[tobj.length] = p;
// trace("added arraybuffer");
}
}
wcode = wcode.replace("{", "{" + pstr);
re = /return ([^;\}]*?)([;\}])/g;
wcode = wcode.replace(re, "postMessage($1)$2");
//trace("re:" + wcode);
var blob = new Blob(["onmessage = " + wcode ]);
// Obtain a blob URL reference to our worker 'file'.
var blobURL = window.URL.createObjectURL(blob);
var worker = new Worker(blobURL);
worker.onmessage = function (e) {
trace("callback from worker " + e.data);
if (cb)
cb(e.data);
};
worker.postMessage(odta, tobj);
};
Теперь я хотел бы реализовать Метод «Присоединиться», т.е. дождаться завершения работы веб-мастера (или отправить сообщение о его завершении). Я знаю, что могу использовать таймер, но это не сохранит контекст вызывающего, закрытие тоже не то, что я ищу, оно должно быть «реальным» блокирующим вызовом.
Он должен работать с Chrome & FF (я уже отказался от IE).
Есть ли способ сделать такой блокирующий вызов так же, как метод join .net?
_ "Теперь я хотел бы реализовать 'Join' метод, т. е. дождаться завершения работы веб-мастера (или отправить сообщение о его завершении) »_ Что делает работник? Неужели 'postMessage' не возвращает ожидаемый результат? Что делает метод 'Join'? – guest271314
Метод Join должен ждать завершения рабочих, я бы сделал что-то вроде «for (i = 0; i
После того, как все вызовы postMessage появились из рабочих потоков? – guest271314