Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2011, 09h04   #1
Membre du Club
 
Inscription : mars 2007
Messages : 214
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 214
Points : 52
Points : 52
Par défaut XPCOM thread Firefox 4

Bonjour,

J'ai une extension pour Firefox qui utilise un XPCOM. L'extension marche bien avec Firefox 3.6. Je travaille maintenant pour la rendre compatible avec Firefox 4, en suivant les articles:
Making your add on compatible with firefox 4
XPCOM changes in Gecko 2.0


Après avoir recompiler le composant XPCOM avec Gecko 2.0 et adapté mon fichier chrome.manifest pour enregistrer mon composant, l'extension se lance maintenant correctement.

Cependant j'ai encore un problème. Mon composant exécute une fonction qui met quelques secondes à s'exécuter. Afin de ne pas freezer l'interface, j'exécutais, dans Firefox 3.6 cette fonction dans un thread séparer de la manière suivante:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    var MyComponent = Components.classes["@foo/example_cpp;1"]
                         .getService(Components.interfaces.nsIMyComponent);
 
    var backgroundTask = {
          callback: {
                result: 0,
                run: function() {
                      processResult(this.result);
                }
          },
          run: function() {
                this.callback.result = MyComponent.myFunction();
                //dispatch event back to the main thread
                threadMngr.mainThread.dispatch(this.callback, thread.DISPATCH_NORMAL);
          }
    }
 
    var thread = threadMngr.newThread(0);
    thread.dispatch(backgroundTask, thread.DISPATCH_NORMAL);
Cela marchait bien. Cepandant, avec Gecko 2, des choses ont changé en ce qui concerne the Thread Manager et il n'est plus possible de faire cela.

Citation:
While these interfaces still exist in Firefox 4, it is no longer possible to transfer JavaScript objects or functions from one thread to another in Gecko 2.0, making event dispatch to any thread but the current impossible from JavaScript. Consider using a ChromeWorker instead; it's not a perfect replacement but may work for you. (here)
J'ai donc regarder du côté de ChromeWorker mais je ne suis pas parvenu a passé mon composant au "worker". Est-ce possible de le faire?

Ou peut-être existe-t-il une autre solution afin de ne pas freezer l'interface?

Merci d'avance pour toute idée
__________________
http://www.timelapse-photo.com/
pasqual est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h56.


 
 
 
 
Partenaires

Hébergement Web