gpt4 book ai didi

java - 从具有时间约束的程序执行程序 (Java)

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:52 24 4
gpt4 key购买 nike

我正在尝试制作运行一些可执行程序的程序(称之为p),给定时间限制t毫秒。它执行以下任务:

  1. 如果程序 p 正常执行,则将其输出打印到控制台。
  2. 如果程序p无法在时限内完整执行,则打印“Sorry,需要更多时间!”,然后终止p的执行。
  3. 如果程序 p 异常终止(例如 RuntimeError),则打印 "Can I've some debugger?"

我在 here 的以下程序中使用 ProcessResultReader 类。只要 p 正常完成执行或异常终止,我的程序就可以工作。但是,如果 p 本身在 timeout 后没有终止,它就不会终止。(尝试使用简单的 p 循环而不需要退出条件)。即使在执行 stdout.stop() 之后,线程 stdout 似乎仍处于 Activity 状态。我在这段代码中做错了什么?

谢谢。

import java.util.concurrent.TimeUnit;
import java.io.*;

class ProcessResultReader extends Thread
{

final InputStream is;
final StringBuilder sb;

ProcessResultReader(final InputStream is)
{
this.is = is;
this.sb = new StringBuilder();
}
public void run()
{
try
{
final InputStreamReader isr = new InputStreamReader(is);
final BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
{
this.sb.append(line).append("\n");
}
}
catch (final IOException ioe)
{
System.err.println(ioe.getMessage());
throw new RuntimeException(ioe);
}
}

@Override
public String toString()
{
return this.sb.toString();
}
public static void main(String[] args) throws Exception
{
int t = 1000;
Process p = Runtime.getRuntime().exec(cmd); //cmd is command to execute program p
ProcessResultReader stdout = new ProcessResultReader(p.getInputStream());
stdout.start();
if(!p.waitFor(t, TimeUnit.MILLISECONDS))
{
stdout.stop();
p.destroy();
System.out.println("Sorry, needs more time!");
}
else
{
if(p.exitValue()==0) System.out.println(stdout.toString());
else System.out.println("Can I've some debugger?");
}
}
}

最佳答案

根据java文档,stdout.stop() 已被弃用,甚至 stdout.destroy() 从未实现。

有关详细信息,请参阅为什么 Thread.stop、Thread.suspend and Thread.resume Deprecated?.

你可以尝试这个。

String cmd="cmd /c sleep 5";
int timeout = 1;
Process p = Runtime.getRuntime().exec(cmd); //cmd is command to execute program p
ProcessResultReader stdout = new ProcessResultReader(p.getInputStream());
stdout.start();
if(!p.waitFor(timeout, TimeUnit.MILLISECONDS))
{
stdout.stop();
p.destroy();
System.out.println("Sorry, needs more time!");
System.out.flush();
}
else
{
if(p.exitValue()==0) System.out.println(stdout.toString());
else System.out.println("Can I've some debugger?");
}

关于java - 从具有时间约束的程序执行程序 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29923492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com