2010-09-01 7 views
0

J'ai un besoin bizarre ici, et je ne suis pas sûr de sa faisabilité. Je ne peux que penser comment je le ferais en utilisant des threads (Pour créer un autre thread qui exécute une fonction Quine le long d'un thread exécutant le script que je veux Quine et exécuter en même temps (sans ajouter manuellement des alertes partout !!! javascript n'a pas cette fonctionnalité, non?Javascript: Exécuter et Quine en même temps

J'ai du JavaScript qui est interprété par une application avec une capacité de débogage JavaScript minime Mon script est tombé et il utilise aussi des instructions uniquement comprises par cette application Je ne peux pas déboguer ceci dans Firefox ou Internet Explorer parce qu'ils ne peuvent pas gérer ces instructions personnalisées, ce que j'espère pouvoir réaliser est un programme qui peut imiter un autre programme mais aussi effectuer ses propres fonctions. Par exemple, j'ai un script appelé hello.js qui affiche 100 fois "Hello World!" et lorsqu'il est fourni à l'application, il l'interprète, mais tombe à un moment donné mais je ne peux pas dire pourquoi, où et quand à cause du capacité de débogage limitée.

function main(){ 
    for(var i=0; i<100; i++){ 
      alert('Hello World!\n'); 
    } 
} 

Je veux alors d'avoir un script que je peux passer à l'application au lieu qui prétend être le script ci-dessus mais aussi alerte avant chaque instruction est exécutée. Je pouvais le faire:

function main(){ 
    alert('main()') 
    for(var i=0; i<100; i++){ 
      alert("alert('Hello World!\n');"); 
      alert('Hello World!\n'); 
    } 
} 

Cependant, je suis sûr que vous pouvez voir comment un programme à long ce serait une tâche ardue. Faites à la place je veux faire un programme qui peut effectuer comme ceci:

function main(){ 
    var text = loadJSScript("C:\\Script\\Hello.js"); //Loads a text/javascript file line by line into an array 
    for(var i=0; i<text.length; i++){ 
      var statement = text[i]; 
      alert("Line Number: " + i + " Statement: " + statement); //Output the line number and statement before executing 
      execute(statement); //A function that executes the statement from the other file (as if a separate thread) 
    } 
} 

Répondre

1

Cela dépend vraiment de votre public cible (utilisation du navigateur).

Vous pouvez obtenir une forme très efficace de pseudo-threading en utilisant des web workers.

http://ejohn.org/blog/web-workers/

Toutefois, ce n'est pas largement pris en charge. Vous pouvez l'utiliser si disponible.

Vous pouvez également obtenir un comportement similaire au thread en utilisant setTimeout pour exécuter le code.

Vous pouvez voir comment les minuteries sont mis en attente ici: http://ejohn.org/blog/how-javascript-timers-work/

Vous pouvez également faire du côté du serveur de calcul Quine et AJAX appel à l'aide. Cela donne une requête asynchrone.

Ces 2 dernières options ne sont pas en cours d'exécution, mais le code n'attendra pas de réponse avant de continuer.

+0

http: //articles.sitepoint.com/article/multi-threading-javascript Un exemple d'article sur le Javascript multi-threading, explorant l'utilisation de setInterval (similaire à setTimeout mais récurrent) Mais si possible, AJAX semble être une solution plus propre. –

+0

À la vôtre Je vais y jeter un coup d'oeil et essayer les web workers. –

0

À ma connaissance, JavaScript est purement mono-thread.
En outre, l'instruction loadJSScript("C:\\Script\\Hello.js"); est louche, puisque vous mentionnez les navigateurs. JS dans les navigateurs (dans les pages Web, au moins) ne peut pas accéder au système de fichiers (à côté, ce n'est pas portable!).
Vous pouvez peut-être faire quelque chose comme ça dans Microsoft JScript (dans WSH), cependant.

+0

C'est un navigateur résidant dans une application côté client avec une capacité de système de fichiers utilisant certaines fonctions javascript propriétaires. Merci d'avoir répondu :) –

Questions connexes