gpt4 book ai didi

scala - 如何合并或跳过 Scala Actor 中的重复消息?

转载 作者:行者123 更新时间:2023-12-04 20:21:38 25 4
gpt4 key购买 nike

假设您有一个 gui 组件,并且 10 个线程都告诉它在单个绘制操作发生之前全部到达的同时重新绘制。与其天真地浪费资源重绘 10 次,只需合并/忽略除最后一个之外的所有资源并重绘一次(或更可能是两次——一次用于第一次,一次用于最后一次)。我的理解是 Swing 重绘管理器执行此操作。

有没有办法在 Scala Actor 中完成这种相同类型的行为?有没有办法查看队列并合并消息,或者忽略除某种类型的最后一个之外的所有消息?

最佳答案

像这样的东西?:

act = 
loop {
react {
case Repaint(a, b) => if (lastRepaint + minInterval < System.currentTimeMillis) {
lastRepaint = System.currentTimeMillis
repaint(a, b)
}
}

如果你想在 Actor 的线程有机会时重新绘制,但没有更多,那么:
(更新:使用最后一条消息参数重新绘制)
act =
loop {
react {
case r@Repaint(_, _) =>
var lastMsg = r
def findLast: Unit = {
reactWithin(0) {
case r@Repaint(_, _) =>
lastMsg = r
case TIMEOUT => repaint(lastMsg.a, lastMsg.b)
}
}
findLast
}
}

关于scala - 如何合并或跳过 Scala Actor 中的重复消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com