Attention : Le contenu de ces pages n'a pas été mis à jour depuis au moins 2016.
Les informations techniques ne sont pertinentes que pour les versions 4.0 maximum de Firefox/Gecko.
Il est fort probable que des liens vers des sites web externes ne fonctionnent plus.

Brouillon

Les différentes situations d'instanciation et de lancement d'un thread

  • situation A : l'objet nsIRunnable est un objet JS défini, instancié dans une variable javascript dans le script xul, et lancé par un objet thread instancié dans le script xul
  • situation B : l'objet nsIRunnable est un xpcom, et instancié dans le script XUL et lancé par un objet thread instancié dans le script xul
  • situation C : l'objet nsIRunnable est un xpcom, instancié dans un autre Xpcom, lancé par un objet thread instancié dans ce même xpcom

Les traitements dans ce nsIRunnable :

  1. on ne fait appel à aucun objet de l'exterieur (document, DOM, objets des scripts XUL, ou n'importe quel autre XPCOM)
  2. on ne fait appel qu'à des xpcoms que l'on instancie dans run()
  3. on veut faire appel à des objets DOM et autres objets JS natifs (Math &co) instanciés dans le script XUL
  4. on veut faire appel à des XPCOM instanciés dans le script XUL
  5. on veut faire appel à un XPCOM instancié en getService à partir d'un script XUL

Quoi faire dans chaque cas ? est -il possible ? Doit-on proxyfié ? à quel moment fait-t-on le proxy (constructeur du nsIRunnable, ou dans le run()) etc... Bref, toutes les infos pour que ça fonctionne (si c'est possible)

traitements situation A situation B situation C
1 ok (pas testé) ok
2 Utiliser des proxys sur les objets xpcom. Proxyfier les objets avant éxecution du thread (pas testé) ok
3 Pour les objets DOM , pas de problèmes. Objets globaux : dead lock (testé avec Math) (pas testé) Math n'est pas considéré comme instanciés dans le script XUL (Global). Le objets du script XUL doivent être proxifiés
4 Comme 2 (pas testé) (pas testé)
5 comme 2 (?) (pas testé) (pas testé)

Comportement inféré :

Si on doit créer un proxy, alors il faut toujours le créer en dehors du run()

Tout ce qui est objet global JS (Math..)et XPCOM est considéré comme GLOBAL.

Tout ce qui est déclaré au niveau script XUL est DOM.

Si nsiRunnable est DOM : objets globals/XPCOM doivent être proxifiés.

Si nsiRunnable est XPCOM: objets DOM doivent être proxifiés.

L'endroit où est instancié l'objet nsIThread n'a aucune importance à priori.

Si on veut faire du thread avec des objets DOM, il est préférable d'utiliser un nsIRunnable déclaré dans le contexte DOM

url

voir

http://skrul.com/blog/projects/threaddem(..) http://groups.google.fr/group/mozilla.de(..) http://www.mozilla.org/projects/xpcom/Pr(..)

http://developer.mozilla.org/en/docs/PRT(..)


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.