// // Un semplice WebWorker (n.1) : // Ce ne sono vari altri simili con // solo piccole differenze ma qui // faccio un calcolo impegnativo // trovare tanti numeri primi... // var ricevuto=0,nunc,konto=0,attesa=150; onmessage=function(eccoqua){ ricevuto=eccoqua.data }; // function lavoro(){ var k,n=20,data=new Date(),ss="??"; if(isNaN(ricevuto))ricevuto=2; if(ricevuto>1){attesa=2000; for(k=0;n>k;k++){konto++; nunc=data.getTime(); ss=[ricevuto," Ora: "+nunc, " Cerca vari numeri primi: "+ konto+" !(n.1)"]} postMessage(ss); setTimeout("trovaprimi()",attesa); return true; } else { postMessage(ss); } setTimeout("lavoro()",attesa);} // // All'avviamento del WebWorker viene // lanciata questa funzione: // lavoro(); // function trovaprimi(){ // Dopo avere trovato vari primi // manda il messaggio e finisce. var inizio,nquanti=20,ntenta=200,elenco; inizio=nunc+ Math.round(1e14*Math.random()); elenco=vai(inizio,nquanti,ntenta); postMessage([inizio,elenco[0], "\u003cbr/\u003e FINE avendo ricevuto "+ ricevuto," in data "+nunc,elenco ]); setTimeout("trovaprimi()",attesa); } // function vai(inidato,prove,ntent){var k, ni=0,li=[],ndato=inidato,passo=1e12; // var preprimo=function(nn,quantepro){ var h,mp,v,da=0; // Decide se np e' un primo var seprimo=function(np){var k,nn,nu; if(np%2==0)return["! ",false,np]; nu=Math.round(Math.sqrt(3*np/2)); for(k=3;nu>k;k+=2){if( np%k==0)return["! ",false,np];} return[" ",true,np," "];}; // Fa vari tentativi di // trovare un primo. if(nn%2==0)da=1; for(h=da;quantepro>h;h+=2){mp=nn-h; v=seprimo(mp);if(v[1])return v;} return v;} // Fa l'elenco dei primi // eventualmente trovati. li[ni]="Inizio! "; for(k=0;prove>k;k++){ li[ni]=" Primo? "+ preprimo(ndato,ntent);ni++; ndato+=passo;};li[ni]=" Basta! "; return li} //