不经过while循环不断检查端口

Han*_*ans 1 java loops port-scanning

在程序(Java)中,我需要检查并行端口中的特定引脚.每当该引脚从逻辑0变为1(正边沿时钟)时,我必须读取端口上的数据并保存它.这种情况大约每10毫秒发生一次,但可能会有所不同.

为了做到这一点,我用一个不断检查端口的while循环创建了一个单独的线程,但这使得处理器变得疯狂,我知道这是因为while循环.我的问题是,如何在不使用处理器密集的while循环的情况下不断扫描端口?该程序并不准确知道何时发生引脚更改,只是它发生在每10ms左右.

Bal*_*usC 6

触发计划以Runnable固定速率执行给定的线程.你可以使用Timer#scheduleAtFixedRate()ScheduledExecutorService#scheduleAtFixedRate()为此.最后一个是首选.

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new PortScanner(), 0, 10, TimeUnit.MILLISECONDS); // Run every 10 ms.
Run Code Online (Sandbox Code Playgroud)

哪里PortScanner可以这样:

public class PortScanner implements Runnable {
    @Override
    public void run() {
        // Scan port here.
    }
}
Run Code Online (Sandbox Code Playgroud)

不要忘记scheduler.shutdown()在应用程序退出时调用,否则线程可能会挂起.