【问题标题】:Infinite loop thread reading from pipe enters a timed_waiting从管道读取的无限循环线程进入 timed_waiting
【发布时间】:2014-06-19 12:59:25
【问题描述】:

我需要一个在后台运行的线程从管道读取,但循环突然停止&当我显示线程状态时,我在 TIMED_WAITING 中找到它如何防止它出现这种行为,在线程内运行的代码下方,谢谢提前。

BufferedReader in = null;

while (started) {

  String xml = "";
  // char [] buf=new char[250];
  try {
    in = new BufferedReader(new FileReader(pipeName));
    while (!in.ready()) {
    }

    // in.read(buf,0,buf.length);
    xml = in.readLine();
    // in.close();

  } catch (Exception e) {
    System.out.println("error:" + e.getMessage());

    continue;
  }

  if (xml != null && !xml.equals("")) {

    System.out.println("recieved: " + xml);
  }
}

编辑: 使用@thomas 的链接后,程序在打印时运行良好,但是当我尝试解析 pr 在字符串上执行一些函数时,读取的数据变得不稳定且不完整

【问题讨论】:

  • 摆脱这个:while(!in.ready()){}
  • @GregKopff 现在它会在更长的时间后停止
  • 等待通知模式怎么样?所以你的代码中没有无限循环。
  • @Thomas 我正在尝试构建某种电路模拟器,它的 UI 是用 java 编写的,电路和微控制器模拟器都是用 C 语言构建的,所以当我开始模拟代码时,我需要用于从电路模拟器中连续读取值的 java UI;这就是为什么我需要无限循环,当然它会被停止
  • @AbdoSalem :嗯,好吧,确实有些不同。我假设 C 代码写入文件,并且您希望在 java 中实时更新文件。也许这是一个类似的问题:stackoverflow.com/questions/14799945/…

标签: java multithreading named-pipes


【解决方案1】:

抱歉@thomas 耽搁了, 当我第一次问这个问题时,我有两个 C 程序和一个 java, 第一个 C 程序在管道中写入然后取消链接它,而另一个写入多次如果它取消链接管道 java 中的线程在一段时间后停止,但如果它没有取消链接我们收到的数据并根据打印良好@GregKopff 假设的编辑,但是当我将 xml 解析添加到第二个程序写入的数据中时,数据到达损坏和丢失,我认为 xml 解析需要太多时间,所以我更改了发送的数据格式,只需添加一个分隔符,我知道这不是一个解决方案,但它对我有用,再次抱歉延迟如果你想要一个版本,请询问,我希望它有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2020-01-17
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多