推奨される方法を使用する際のボトルネックは何ですか?
ハードウェアと実行可能ファイル自体が最も大きな問題です。実行可能ファイルがしばらくして完了した場合は、正常であるはずです。あなたは何かを待っているプロセスの1000を望んでいません。プロセスが開始したらプロセスを監視し、タイムアウトに達するとプロセスを終了する必要もあります。もう1つの考慮点は、ユーザーあたりの同時プロセス数を制限することです。
たとえば、ユーザーがボタンをクリックして実行可能ファイルを実行すると、これは2番目のユーザーのパフォーマンスに影響しますか?
直接ではありません。上記を参照。
ボタンを同時に押すとどうなりますか?
毎回新しいスレッド(またはタスクスケジューラ)でプロセスを開始すると、何も表示されません。ボタンが押されるたびに、新しいプロセスが開始されます。
実行が完了したかどうかを知るにはどうすればいいですか(OSは私のために管理するとは思わない)。ここで
例です。
String command = "PATH_TO_EXECUTABLE/EXECUTABLE PARAMS ";
log.info("Executing command - " + command);
// Executing the command
Process process;
ArrayList<String> outLines = new ArrayList<String>();
try {
process = Runtime.getRuntime().exec(command);
// Getting the results
process.getOutputStream().close();
String line;
log.info("Standard Output:");
BufferedReader stdout = new BufferedReader(new InputStreamReader(
process.getInputStream()));
while ((line = stdout.readLine()) != null) {
log.info(line);
outLines.add(line);
}
stdout.close();
log.info("Standard Error:");
BufferedReader stderr = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
while ((line = stderr.readLine()) != null) {
log.info(line);
}
stderr.close();
log.info("Done");
} catch (IOException e) {
log.error("Error while exceuting command", e);
}
String result = outLines.get(outLines.size()-1);
//TODO do something with the results
//at this point the process has finished executing
単にそれをしようと行動をプロファイル。 – MrSmith42
スレッドを作成し、外部プロセスのステータスを追跡します。 –
実行可能ファイルの実行方法を実装する前に、ボタンへのアクセスを同期させる必要があると思われます。パフォーマンスの問題を考える前に、プログラムの精度について考える必要があります。 – Juvanis