标签: real-time

Java中的实时图形

我有一个应用程序,每秒更新一次变量大约5到50次,我正在寻找一种实时绘制这种变化的连续XY图的方法.

虽然不建议将JFreeChart用于如此高的更新率,但许多用户仍然认为它适用于它们.我已经尝试使用这个演示并修改它以显示一个随机变量,但似乎一直使用100%的CPU使用率.即使我忽略了这一点,我也不希望被限制在JFreeChart的ui类来构造表单(尽管我不确定它的功能是什么).是否可以将其与Java的"表单"和下拉菜单集成?(如VB中所示)否则,我有什么其他选择吗?

编辑:我是Swing的新手,所以我把一个代码放在一起只是为了测试JFreeChart的功能(同时避免使用JFree的ApplicationFrame类,因为我不确定它如何适用于Swing的组合盒子和按钮).现在,图表正在立即更新,CPU使用率很高.是否可以使用新的Millisecond()缓冲该值并将其更新为每秒两次?另外,我可以在不中断JFreeChart的情况下将其他组件添加到JFrame的其余部分吗?我该怎么办?frame.getContentPane().add(new Button("Click"))似乎覆盖了图形.

package graphtest;

import java.util.Random;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

public class Main {
    static TimeSeries ts = new TimeSeries("data", Millisecond.class);

    public static void main(String[] args) throws InterruptedException {
        gen myGen = new gen();
        new Thread(myGen).start();

        TimeSeriesCollection dataset = new TimeSeriesCollection(ts);
        JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "GraphTest",
            "Time",
            "Value",
            dataset,
            true,
            true,
            false
        );
        final XYPlot plot = chart.getXYPlot();
        ValueAxis axis = …
Run Code Online (Sandbox Code Playgroud)

java graph real-time jfreechart

14
推荐指数
1
解决办法
3万
查看次数

AudioTrack:由于采样率不匹配,客户拒绝了AUDIO_OUTPUT_FLAG_FAST

有人知道如何修复此警告消息吗?

07-14 10:38:55.411 V/tracker-audiotest(22426):录制Thread :: run():启动audioRecord录制.07-14 10:45:51.490"W/AudioTrack(607):由于采样率不匹配(44100 vs 48000),客户拒绝了AUDIO_OUTPUT_FLAG_FAST"

当我在Android 4.4上测试音频延迟时,在看到此警告消息后,我突然出现延迟增加.但是我在测试期间没有改变采样率,初始设置是48kHz.录制开始7分钟后会出现此警告消息.

如果需要,您可以在设备上测试此项目.该项目位于GitHub:

https://github.com/garyyu/OpenSL-ES-Android-DelayTest

audio real-time low-latency

14
推荐指数
1
解决办法
2万
查看次数

Linux中的微秒准确(或更好)处理时序

我需要一种非常准确的方法来计算我的程序的一部分.我可以使用常规的高分辨率时钟,但这将返回挂钟时间,这不是我需要的:我需要花时间只运行我的进程.

我清楚地记得看到一个Linux内核补丁,它允许我将我的进程计时到纳秒精度,除了我忘了给它添加书签,我也忘记了补丁的名称:(.

我记得它是如何工作的:

在每个上下文切换时,它将读出高分辨率时钟的值,并将最后两个值的增量添加到正在运行的进程的处理时间.这样可以生成过程实际处理时间的高分辨率精确视图.

使用常规时钟保持常规处理时间,我相信毫秒精确(1000Hz),这对我来说太大了.

有谁知道我在说什么内核补丁?我还记得它就像一个带有字母的字母在它之前或之后 - 像'rtimer'之类的东西,但我记不清楚了.

(也欢迎其他建议)


Marko建议的完全公平调度程序不是我想要的,但看起来很有希望.我遇到的问题是,我可以用来获取处理时间的调用仍然没有返回足够精细的值.

  • times()返回值21,22,以毫秒为单位.
  • clock()返回值21000,22000,粒度相同.
  • getrusage()返回的值如210002,22001(以及其中一些),它们看起来有更好的准确性,但值看起来显着相同.

所以现在我可能遇到的问题是内核有我需要的信息,我只是不知道将返回它的系统调用.

linux real-time process timing high-resolution

13
推荐指数
2
解决办法
2万
查看次数

该算法是现有的实时系统算法吗?

我已经开发了一种调度算法,它提供了概率的软实时保证,但它看起来太新而且简单明了.虽然我把它与已发布的实时调度算法(EDF,零星服务器等)联系起来很困难.以下调度算法是否为已知的实时算法?

假设:

  • 所有任务都来自一个分布,其中X百分比的任务需要少于R cpu-seconds
  • 所有任务都有相同的截止日期.如果任务花费的时间超过T秒,则该任务失败
  • 任务到达由已知的最小到达间隔时间MIN_INTER_ARRIVE_T分隔
  • 调度程序有一个任务集,可以随时保存最多H个任务(在每个时间步骤中,任务集中的所有任务通过平均共享CPU来实现相同的进度)
  • 任务不能相互影响

保证:

  • (1)如果X的任务百分比要求少于R cpu-seconds和(2)R <= T/H,(3)MIN_INTER_ARRIVE_T> = T/H,那么至少X个百分比的任务将在T秒内完成

算法:

  • 如果任务到达且任务集已满,则逐出已使用最多CPU的任务.假设保证这样的任务至少使用R cpu-seconds.因此,可以驱逐的唯一任务将是失败的任务.任何需要少于R cpu-seconds的任务都将按时完成.

algorithm scheduling real-time scheduled-tasks

13
推荐指数
1
解决办法
513
查看次数

为什么不是每个操作系统都是实时的?

我没有听到关于RTOS的好消息 - 它们让程序员更好地控制调度程序,以便例如避免优先级倒置,它们的时序更加一致,更好的多任务处理.但是所有标准桌面设置都使用非实时操作系统.因此,使用RTOS必须有一些权衡,它们是什么?

operating-system real-time real-time-systems

13
推荐指数
1
解决办法
4441
查看次数

如何在多个客户端上同步播放YouTube视频?

我希望了解如何构建一个允许多个用户在其计算机上同步观看同一YouTube视频的网络应用.例如,synchtube.comwatch2gether.com

我正在寻找一个简单的方法,可以使用通用的技术,如来实现PHP,jQueryApache.我目前正在考虑轮询(或彗星长轮询,但这需要更复杂的服务器设置,我希望避免),类似于Ajax聊天应用程序的实现方式 - 客户端不断检查服务器以查看哪个视频是播放.但是,我怀疑这里会出现延迟问题,因此视频不会完全同步.我还想不出更好的方法.

对于开发人员社区,对方法或代码片段的任何帮助都非常感谢!

php youtube ajax jquery real-time

13
推荐指数
2
解决办法
2万
查看次数

使用Server-Sent事件进行双向客户端 - 服务器通信(而不是WebSockets)的缺点

最近我发现Server-Sent事件是WebSockets的一个更简单的替代方法,用于从服务器进行推送.大多数比较它们的地方(比如这里,这里这里)说,如果你不需要客户端和服务器之间的全双工通信,那么WebSockets就太过分了,SSE就足够了.

我的问题是当你需要双向通信(例如聊天),使用常规的ajax请求从客户端发送消息和服务器流接收它们时,使用SSE的缺点是什么?考虑到我必须在服务器端做很少甚至没有配置来使用SSE,它似乎是一个更吸引人的选择.

real-time server-push websocket server-sent-events

13
推荐指数
1
解决办法
5141
查看次数

Linux中间隔计时器的准确度是多少?

我试图描述Linux上的计时器抖动.我的任务是运行100毫秒的计时器,看看这些数字是如何运作的.

我正在研究多核机器.我使用了setitimer()的标准用户程序,以root身份运行,然后使用处理器亲和性,最后使用处理器亲和性和进程优先级.然后我使用PREEMPT_RT内核运行相同的内容,然后使用clock_nanosleep()运行示例,如PREEMPT_RT页面上的演示代码中所示.在所有运行中,计时器性能非常相似,尽管有变化,但没有真正的差异.

我们的最终目标是稳定的计时器.我经常得到的最好的最坏情况是大约200us.所有案例的直方图都显示出奇怪的行为.首先,我不希望计时器提前开火.但他们这样做.正如您在直方图中看到的那样,我在0偏移的两边都得到了低谷.这些在第二个图中的三个波段中可见.在第一个图中,X轴以微秒为单位.在第二个图中,Y轴以微秒为单位.

我跑了30s测试(即300个计时器事件)100次以生成一些数字.您可以在下图中看到它们.200us大幅下降.所有30000定时器事件时钟偏移都在第二个图表中绘制,您可以在其中看到一些异常值.

X轴以微秒为单位Y轴以微秒为单位

所以问题是,之前有其他人做过这种分析吗?你有没有看到同样的行为?我的假设是RT内核可以帮助重载系统,但在我们的例子中,它无助于消除定时器抖动.那是你的经历吗?

这是代码.就像我之前说过的,我修改了使用clock_nanosleep()函数的PREEMPT_RT站点上的示例代码,因此我不会包含我的最小更改.

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <stdlib.h>

#define US_PER_SEC 1000000
#define WAIT_TIME 100000
#define MAX_COUNTER 300

int counter = 0;
long long last_time = 0;
static long long times[MAX_COUNTER];
int i = 0;

struct sigaction sa;

void timer_handler(int signum)
{
    if (counter > MAX_COUNTER)
    {
        sigaction(SIGALRM, &sa, NULL);
        for (i = 0; i < MAX_COUNTER; i++)
        {
            printf("%ld\n", times[i]);
        }
        exit(EXIT_SUCCESS);
    }

    struct timeval t;
    gettimeofday(&t, NULL);

    long long elapsed = …
Run Code Online (Sandbox Code Playgroud)

c linux real-time timer preempt-rt

13
推荐指数
1
解决办法
2071
查看次数

是否存在不希望优先级继承的情况?

我理解优先级继承是什么.我也理解,从Mars Pathfinder的系统重置问题来看,大多数情况下,根据操作的重要性,启用/实现优先级继承是好的.

但是,是否存在不希望优先级继承的情况,如果启用/实现可能会导致问题?如果是这样,你能提供一个例子,最好是描述一个问题吗?

language-agnostic scheduling real-time thread-priority

13
推荐指数
1
解决办法
473
查看次数

使用Boost.Fiber,c ++是否更接近Erlang风格的流程/线程?

我正在阅读http://olk.github.io/libs/fiber/doc/html/在我看来,使用Boost.Fiber C++正在接近Erlang拥有数千个"进程"的能力,也被称为"绿色"进程[threads]" http://en.wikipedia.org/wiki/Green_threads.

我的问题是,是Boost.Fiber为生产做好准备,还有现在 ç有更好的文档和示例++的替代品?有人提到轻量级线程,但我似乎无法找到它的引用.最后一个问题是,为什么C++标准不包括Fibers?

我对此感兴趣的原因是因为我有实时更新,其中值更改可能会影响(产生)数百个/小型的小型但令人尴尬的并行计算.imo,C++线程模型不能很好地工作.请不要使用GPU,因为它目前需要很长时间才能将信息传输到GPU或从GPU传输信息.

我意识到Erlang远不止这个,所以请不要在一般情况下教我Erlang vs C++.

erlang boost real-time fiber c++11

13
推荐指数
1
解决办法
7550
查看次数