2016-01-18 35 views
3

使用AutoIt 3,有沒有辦法將其他參數傳遞給_Timer_SetTimer函數中的回調方法?AutoIt _Timer_SetTimer - 其他回調參數

這裏是我的用例(主循環):

For $item In $items 
    _Timer_SetTimer(0, $timeOffset, "MyMethod") 
Next 

回調方法:

Func MyMethod($hWnd, $iMsg, $iTimerID, $iTime) 
    _Timer_KillTimer ($hWnd, $iTimerID) 

    // Do something on $item 

EndFunc 

我使用Global變量試過,但MyMethod每一個實例,然後使用最後一個值。我這樣做:

Global $currentItem 

For $item In $items 
    $currentItem = $item 
    _Timer_SetTimer(0, $timeOffset, "MyMethod") 
Next 

Func MyMethod($hWnd, $iMsg, $iTimerID, $iTime) 
    _Timer_KillTimer ($hWnd, $iTimerID) 

    $item = $currentItem 
    // Do something on $item 

EndFunc 

那麼,我做錯了,還是有辦法直接傳遞參數嗎?謝謝。

回答

2

如果您的通話延遲是有序的,你仍然可以使用全局變量的值存儲在陣列:

Global $values[0] 

For $item In $items 
    _ArrayAdd($values, $item) 
    _Timer_SetTimer(0, $timeOffset, "MyMethod") 
Next 

Func MyMethod($hWnd, $iMsg, $iTimerID, $iTime) 
    _Timer_KillTimer ($hWnd, $iTimerID) 

    _ArrayReverse($values) 
    $item = _ArrayPop($values) 
    _ArrayReverse($values) 

    // Do something on $item 

EndFunc 

的雙反和流行是有模擬FIFO隊列