PDA

View Full Version : [javascript]multithread


MEMon
09-02-2008, 19:03
Sto cercando di creare una classe Thread.

function Thread(schedule,param){
this.schedule=schedule;
this.id=null;
this.param=param;
var self=this;
this.start=function(){
var tempFunc=function(){
self.schedule(self.param);
clearInterval(self.id);
}
this.id=setInterval(tempFunc,0);
}
}

function test(n,y){
var div=document.getElementById(n);
for(var i=0;i<10000;i++){
div.innerHTML="Thread("+n+"):"+i;
if(n==1&&i==350){
alert("Stop Thread("+n+")");
}
if(n==2&&i==100){
alert("Stop Thread("+n+")");
}
}
alert("Thread("+n+") has finished");
}

var thread1=new Thread(test,1);
var thread2=new Thread(test,2);
thread1.start();
thread2.start();

In teoria io ho pensato che siccome il codice viene "lanciato" con un setInterval sarebbe stato asincrono, ma non è vero, eseguendo questo codice si nota infatti che test(2) del thread2 parte solo dopo la fine di test(1)...

C'è modo di tirar fuori un vero multithreading?:confused:

wizard1993
09-02-2008, 22:06
C'è modo di tirar fuori un vero multithreading?:confused:

siceramente credo che in un linguaggio di scripting come questo no, perchè comunque sia tu non dici all'interprete di creare prima un oggetto poi un altro e poi chiamarli, il problema è che il linguaggio non passa oltre fino alla conclusione della prima operazione.
non so se dice così, ma credo che lordine delle chiamate sia lineare, non parallelo

wizard1993
09-02-2008, 22:06
C'è modo di tirar fuori un vero multithreading?:confused:

siceramente credo che in un linguaggio di scripting come questo no, perchè comunque sia tu non dici all'interprete di creare prima un oggetto poi un altro e poi chiamarli, il problema è che il linguaggio non passa oltre fino alla conclusione della prima operazione.
non so se dice così, ma credo che lordine delle chiamate sia lineare, non parallelo

gugoXX
09-02-2008, 22:23
Si', esatto.
E' moltithread, ma non multitask.
Non rilascera' il controllo per eventuali nuovi Thread fino al termine della funzione.

Fai delle piccolissime e brevissime macchine a stati, che fanno quello che vorresti si facesse ad ogni passo del ciclo, e poi ritornano subito.

Il tuo master esterno chiama entrambe le funzioni, e poi risetta il timer qualche centesimo di secondo dopo. (Non zero, cosi' il browser puo' fare anche altro, dovesse capitare).