2016-05-15 84 views
1

我有一個可以正常工作的功能,但是如果我增加記錄號,就會發生15秒的超時錯誤。我已經看到暗指將一個函數「分類」,將其分解爲大塊,以便讓處理器再次開始15秒,但似乎無法使其正常工作。 代碼:AS3:如何分解函數以避免15秒超時規則?

startBatch=0; 
private function findDupes():void { 
    var el:Number; //elapsed time variable 
    timeoutTime = getTimer(); 
    for (var i:int = startBatch; i < numTix; i++) { // numTix = total number of records 
     for (var j:int = i + 1; j < numTix; j++) { 
      if (individualTicket[i] == individualTicket[j]) { 
       // mark duplicate 
      } 
     } 
     el = getTimer() - timeoutTime; 
     if (el > 1000) { 
      trace("batched out"); 
      batchOut(i); 
      return; 
     } 
    } 
    weAreDone(); 
} 

private function batchOut(i:int):void { 
    updateTB2(i); //attempts to update a textbox and FAILS to do so 
    trace("Out at # ", i); 
    if (i < numTix) { 
     startBatch = i; 
     findDupes(); 
    } 
    else { 
     weAreDone(); 
    } 
} 

因此,每一秒,其 「批出」,並在新的號碼(startBatch)開始findDupes()函數了。我曾希望這會重置超時錯誤,但相反,我得到一根棍子的垃圾。

任何人都可以指向正確的方向嗎?

+0

您需要檢查內循環中的時間,然後保存外循環的值以處理下一幀的剩餘部分。 – Vesper

回答

1

您需要修改batchOut函數。目前,它不允許Flash引擎更新屏幕上的任何內容,因爲它會立即調用findDupes的另一次迭代,而應該在下一幀開始時返回並設置另一個迭代的類。我在這裏假設這個代碼中有一個stage變量可用。你需要一些東西來允許聽Event.ENTER_FRAME爲了做這種類型的批處理,stage是顯示對象的通用錨點。

private function batchOut(i:int):void { 
    updateTB2(i); //attempts to update a textbox and FAILS to do so 
    trace("Out at # ", i); 
    if (i < numTix) { 
     startBatch = i+1; // your findDupes pass the already processed value of outer index 
     // findDupes(); this is a recursion call, drop 
     if (!(stage.hasEventListener(Event.ENTER_FRAME,continueBatch)) { 
      stage.addEventListener(Event.ENTER_FRAME,continueBatch); 
     } 
    } 
    else { 
     weAreDone(); 
     if (stage.hasEventListener(Event.ENTER_FRAME,continueBatch)) { 
      stage.removeEventListener(Event.ENTER_FRAME,continueBatch); 
     } 
    } 
} 
// now the function to be called 
private function continueBatch(e:Event):void { 
    // this is called in the NEXT frame, so you can freely call your worker function 
    findDupes(); 
} 
+0

謝謝你,Vesper!我的名聲不會顯示我的贊成,但我試過! :)但我確實接受了你的答案。我爲你解決的主要問題是,我的代碼沒有進入下一幀,從而打破了15秒的倒計時,對吧?確切地說, – Chowzen

+0

。需要釋放代碼流(從任何地方返回)以便Flash進入下一幀。 – Vesper