如果我正確理解你,你希望傳輸每100ms發生一次,但你不想爲此創建另一個線程(並且演員內部的Thread.sleep
實際上可能會阻止該流)。 您可以使用reactWithin
:
import java.util.Date
import math.max
def some_method = {
var last_transmission_time = 0
loop {
val current_time = (new Date).getTime
reactWithin(max(0, last_transmission_time + 100 - current_time)) {
// actor reaction cases
case TIMEOUT => {
// Transmit something
last_transmission_time = (new Date).getTime
}
}
}
}
的last_transmission_time
保存最後一次傳輸已完成。 計算反應超時值,以便在當前時間爲最後傳輸時間+ 100ms時發生TIMEOUT。
如果發生超時,則意味着自上次傳輸以來超過100ms,因此應該調用另一次傳輸。
如果反應案件本身可能需要很長時間,那麼我看不到任何簡單的解決方案,但創建另一個線程。
我沒有嘗試代碼,因爲我不確定是否完全理解您的問題。
將該方法重構爲actor? –