为什么一个线程和另一个线程的操作之间有一个毫秒的时间延迟?

时间:2017-09-29 11:03:51

标签: java multithreading opencv lag scheduledexecutorservice

我一直在使用java开放式CV开发一些计算机视觉软件以瞄准炮塔,该程序的基本结构如下:

父类,处理用户JFX接口函数的Java-FX应用程序线程,运行下面讨论的调度服务执行程序线程,并包含一个名为Turret的类的实例和一个名为Target的类。

为了感兴趣,炮塔类有一个名为Aim的函数,它使用了java简单的串行库

这个父应用程序类计划运行两个线程,并按如下方式调用:

Start-processing-loops()
Runnable ImageProcessLoop = new Runnable(){
        @Override
        public void run()
        {
            capture footage and process frames()
            Store data extracted from frames in Target class()
        }
});
frametimer = Executors.newSingleThreadScheduledExecutor();
frametimer.scheduleAtFixedRate(ImageProcessLoop, 0, 1, TimeUnit.MILLISECONDS);

Runnable DataProcessLoop = new Runnable(){
            @Override
            public void run()
            {
                Use data stored in Target class to call a function in Turret class()
            }
    });
datatimer = Executors.newSingleThreadScheduledExecutor();
datatimer.scheduleAtFixedRate(DataProcessLoop, 0, ImProc.frametime/2, TimeUnit.MILLISECONDS);

当通过相机处理线程或父FX应用程序类调用类Turret中的函数Aim时,其执行没有延迟。

从数据处理线程调用Aim命令时,在执行命令之前有一个明显的(大约100 ms)延迟。

为什么一个线程和父类没有延迟,但数据处理线程会这样做。

已检查的问题:

  • 数据处理循环需要很长时间才能处理: 不,测量的处理时间是1毫秒。这也证明了 事实上,父类在屏幕上实时显示数据。

  • 在与图像处理相同的线程上运行处理命令 (首先列出执行者服务)当目标时再次没有延迟 命令叫做

亲切的问候,

戴尔

0 个答案:

没有答案