Compare Revisions

Delayed Execution

Change Revisions

Revision 504079:

Revision 504079 by wbamberg on

Revision 642903:

Revision 642903 by kmaglione on

Title:
Threads
Threads
Slug:
Mozilla/Add-ons/Code_snippets/Threads
Mozilla/Add-ons/Code_snippets/Threads
Tags:
"Code snippets"
"Code snippets"
Content:

Revision 504079
Revision 642903
t54    <h2 id="Creating_a_real_thread" name="Creating_a_real_thread"t
>> 
55      Creating a real thread
56    </h2>
57    <p>
58      In versions of Gecko prior to 2.0, it is possible to create
> real asynchronous threads. Although this can often be accomplish 
>ed without serious adverse effects, it is far from safe and often 
> leads to unpredictable crashes. For this reason, as of Gecko 2.0 
>, it is no longer possible to pass JavaScript objects from one th 
>read to another, making the Thread Manager unuseable from JavaScr 
>ipt. 
59    </p>
60    <p>
61      Using a real thread is far more difficult to get right. In 
>particular there are lots of pitfalls where you can't touch the D 
>OM and many other components from a background thread. Doing so c 
>an cause the whole application to crash or hang. When testing you 
>r code you should do so in a debug build so that you can see any  
>thread-safety issues that are asserted in the console. 
62    </p>
63    <pre class="eval">
64 backgroundTask = {
65   run: function() {
66     // perform work here that doesn't touch the DOM or anything 
>else that isn't thread safe 
67   }
68 }
69 
70 var thread = Components.classes["@mozilla.org/thread-manager;1"]
71                        .getService(Components.interfaces.nsIThre
>adManager) 
72                        .newThread(0);
73 thread.dispatch(backgroundTask, thread.DISPATCH_NORMAL);
74</pre>
75    <p>
76      This shows a simple object that has its run method called b
>y a background thread that is created. There is more detail on th 
>is sort of technique and ways that you can safely touch threadsaf 
>e objects in the <a href="/en/The_Thread_Manager" title="en/The_T 
>hread_Manager">Thread Manager</a> documentation. 
77    </p>

Back to History