周期性功能与其他任务并行

时间:2016-03-06 20:29:31

标签: java multithreading

我已经实施了地面站软件。它以1Hz的频率连续读取串行输入以获取新数据,并将更新软件的不同部分。这就是我到目前为止的做法:(只是重要的部分)

复习功能:

public void refresher(SerialPort rx){
                   refreshed++;
                    readRX(rx);
                  if(refreshed<5) return;
         parseString(lastTelemetry);

         updateModel(Double.parseDouble(parsedLastTelemetry.get(telemetry.get("heading"))),Double.parseDouble(parsedLastTelemetry.get(telemetry.get("pitch"))),Double.parseDouble(parsedLastTelemetry.get(telemetry.get("roll"))));

}

连接按钮的动作事件:

connect.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent actionEvent) {
            if(!portSelect(portNum)) return;
            disconnect.setDisable(false);
             Runnable r1 = new Runnable() {
            public void run() {
              try {
                while (true) {
                  refresher(rx);
                  Thread.sleep(1000L);
                }
              } catch (InterruptedException iex) {}
            }
          };
       Thread thr1 = new Thread(r1);
       thr1.start();

串行阅读器功能:ReadRx

private void readRX(SerialPort rx){
                    while(ss.hasNextLine()){
                        String temp = ss.nextLine();
                        if (temp.isEmpty()) continue;
                        if(temp.charAt(0)!='7'|| temp.charAt(1)!='0' || temp.charAt(temp.length()-1)!=';') continue;
                        if(temp.lastIndexOf("7098")!=0) continue;

                        lastTelemetry = temp;
                        System.out.println(lastTelemetry);
                        break;
                    }
}

问题是当软件从串行CPU风扇读取开始像地狱一样工作,软件看起来没有响应。当我试图关闭软件时,也没有响应。 这可能是一个愚蠢的问题,但我想要一种方式,刷新功能每隔1秒与其他进程并行运行,其他部分通常执行自己的任务。\

请不要像专家那样回答我:)我是java和javafx的新手,之前从未做过这项工作。

0 个答案:

没有答案