小编Dan*_*ann的帖子

Akka消息传递时间

我正在与Scala和Akka一起进行人工生命模拟,到目前为止,我对两者都非常满意.我有一些时间问题,但我无法解释.

目前,模拟中的每只动物都是一对演员(动物+大脑).通常,这两个演员轮流(动物将传感器输入发送到大脑,等待结果,作用于它并重新开始).然而,不时地,动物需要彼此互动以互相吃饭或繁殖.

对我来说奇怪的一件事是时机.事实证明,从一只动物向另一只动物发送信息比从动物发送到大脑要慢很多(大约100倍).这使得我的可怜的食肉动物和性活跃的动物处于劣势,而不是素食者和无性动物(免责声明:我自己也吃素,但我认为成为素食主义者的理由比在尝试捕食时陷入困境更好. ).

我提取了一个演示问题的最小代码片段:

package edu.blindworld.test

import java.util.concurrent.TimeUnit

import akka.actor.{ActorRef, ActorSystem, Props, Actor}
import akka.pattern.ask
import akka.util.Timeout

import scala.concurrent.Await
import scala.concurrent.duration.Duration
import scala.util.Random

class Animal extends Actor {
  val brain = context.actorOf(Props(classOf[Brain]))
  var animals: Option[List[ActorRef]] = None

  var brainCount = 0
  var brainRequestStartTime = 0L
  var brainNanos = 0L

  var peerCount = 0
  var peerRequestStartTime = 0L
  var peerNanos = 0L

  override def receive = {
    case Go(all) =>
      animals = Some(all)
      performLoop()
    case BrainResponse =>
      brainNanos += (System.nanoTime() …
Run Code Online (Sandbox Code Playgroud)

scala artificial-life akka

5
推荐指数
1
解决办法
181
查看次数

在 Windows 10 上使用 Logitech 鼠标接收高精度 WM_MOUSEWHEEL 事件

为了改进应用程序中的滚动,我最近添加了对高分辨率滚轮事件的支持。根据文档,这非常简单:WM_MOUSEWHEEL 的处理程序应该支持任意值,而不是仅 +/- 120。

正确执行此操作的应用程序示例是 Windows 上的 Firefox 和 Chrome。

我使用的是带有高分辨率滚轮的 Logitech 鼠标 (MX Master 3),但我注意到我收到的所有事件都只是 +/- 120。但是,我可以找到两个非常奇怪的解决方法:

  • 将我的程序重命名为 Firefox.exe
  • 专注于 Firefox(我的应用程序在后台),将鼠标移到那里并滚动到那里

第二个技巧也适用于其他事情。例如,它使 Windows 10 设置应用程序滚动顺畅。以下是操作差异的演示(前 4 秒聚焦,然后 Firefox 聚焦则不聚焦):https://www.youtube.com/watch ?v=gb1FUtyLxUg&feature=youtu.be

我认为驱动程序这样做是为了与无法处理 120 以外的任何内容的旧应用程序兼容。但是有没有办法让我的应用程序选择加入以获得更好的事件?或者罗技驱动程序只是硬编码了一堆浏览器而其他人都运气不佳?

scroll smooth-scrolling logitech windows-10

5
推荐指数
1
解决办法
494
查看次数