2011-11-06 32 views
1

我該如何在JavaScript中做一個自旋鎖?Spinlock in Javascript

我試圖加載一些圖片,一切都被加載後,我只可以向前走,所以我有這樣

for(...) 
    image[i].onload = function() { ++imagesloaded; } 

while(imagesloaded != totalimages) 
{ 
} 

一個自旋鎖,並且它崩潰了我的瀏覽器。有沒有更好的方法來做到這一點?或者我失蹤的產量/睡眠功能?

回答

0

不要使用循環來檢查。檢查事件處理函數。 (所以你只做圖像加載時檢查,而不是連續和儘可能快)

+0

[哦,你的意思是這樣嗎? ':P'](http://stackoverflow.com/questions/8030971/spinlock-in-javascript/8030988#8030988) –

3

簡短的回答:不要自旋鎖。


較長的答案:這裏是如何做到這一點:

var imagesLoaded = 0; 
var totalImages = 42; 

function handleImageLoad() 
{ 
    imagesLoaded++; 
    if (imagesLoaded === totalImages) 
    { 
     doSomething(); 
    } 
} 

for (var i=0; i<totalImages; i++) 
{ 
    image[i].onload = handleImageLoad; 
} 

在一般情況下,當你想睡覺/等待/旋在JavaScript中,而不是考慮在以下方面解決問題回調(和setTimeout/setInterval)。

+1

請記住,您必須在'.src'之前設置'onload()'處理程序在圖像上設置。否則,如果圖像從緩存中加載(因此加載非常快),您可能會錯過某些瀏覽器中的'onload()'事件。 – jfriend00