AutoIt _Timer_SetTimer - 其他回调参数

时间:2016-01-18 13:27:20

标签: callback arguments autoit

使用AutoIt 3,有没有办法将其他参数传递给_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

那么,我做错了还是有办法直接传递参数?感谢。

1 个答案:

答案 0 :(得分:3)

如果订购了延迟调用,您仍然可以使用Global变量将值存储在数组中:

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队列