Thread

4 respostas
C

Pessoal,

Tem como usar uma Thread para monitorar o término de execução de *. bat, que demora em torno de 20 min ?

Queria monitorar o término desse processo abaixo:

Process p = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+"cmd /c "+ “C:\temp\teste.bat”);

Alguém tem idéia de como seria o código…mais ou menos ?

4 Respostas

C

caramba! … ninguém tem idéia de como resolvo isto… :frowning:

kaique

Cara, se eu não me engano você coloca essa chamada ao seu .bat, que você colocou no seu post, dentro de uma Thread. Depois, com posse do objeto Process, você chama o método waitFor(). Assim, a Thread vai terminar somente quando o seu processo terminar. Acho que isso atende as suas necessidades…

Obs.: Se tiver dificuldades em desenvolver a solução, me avisa que implementei algo aqui que pode te ajudar. Mas não se acostume com ess boa vida… :stuck_out_tongue:

[]'s.

C

Opa…valeu a dica cara… eu tentei de tudo nesse feriadão…mas num deu certo… minha ultima tentativa foi a seguinte:

Class RunMainProcess{

public void runProcess(){
     TreadDeploy td = new ThreadDeploy();
      td.start();
      try{
          td.wait();
      }catch(InterruptedException e){
          e.printStackTrace();
     } 
     Process p2 = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+"cmd /c "+ "C:\\temp\\comando.bat");

}

public class ThreadDeploy extends Thread(

public void run(){

syncronized(this)}

Process p1 = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+"cmd /c "+ C:\temp\teste.bat);

p.waitfor();

}
}

}
}

eu queria que só executasse o processo P2 somente depois que terminasse a execução do processo P1 (que demora 20 min pra finalizar)…

kaique

Dá uma olhada no que eu fiz aqui e vê se te ajuda…

import java.io.IOException;

/**
 * Classe que executa um aplicativo do sistema operacional, indicando no fim o
 * estado atingido, o tempo de execução e o comando executado.
 * 
 * @author Carlos Henrique ([email removido])
 * @since Apr 21, 2009
 * @version 1.0
 */
public class Pingador implements Runnable {

	private String name;
	private String command;
	private String[] params;

	public Pingador(String name, String command, String[] params) {
		this.name = name;
		this.command = command;
		this.params = params;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Runnable#run()
	 */
	public void run() {
		StringBuffer buffer = new StringBuffer(command);
		buffer.append(" ");
		for (int i = 0; i < params.length; i++) {
			buffer.append(params[i]);
			buffer.append(" ");
		}

		Process process;
		int state = -1;
		long initTime = 0l;
		long finalTime = 0l;
		try {
			initTime = System.currentTimeMillis();
			process = Runtime.getRuntime().exec(buffer.toString());
			state = process.waitFor();
			finalTime = System.currentTimeMillis();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		System.out.println(name + " finalizou\t[estado: " + state
				+ "]\t[tempo: " + (finalTime - initTime) + "ms]\t\t[comando: "
				+ buffer.toString() + "]");
	}

}
import java.util.Random;

/**
 * Classe que dispara algumas Thread's que serão responsáveis por executar
 * certas aplicações do sistema operacional.
 * 
 * @author Carlos Henrique ([email removido])
 * @since Apr 21, 2009
 * @version 1.0
 */
public class Analisador {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Random random = new Random();
		System.out.println("Iniciando as Threads...");
		for (int i = 0; i < 15; i++) {
			Pingador ping = new Pingador("Thread-" + i, "/sbin/ping",
					new String[] { "-c",
							String.valueOf(random.nextInt(20) + 1),
							"www.google.com.br" });
			new Thread(ping).start();
		}
		System.out.println("Threads construídas.");
	}

}

Com essas duas classes eu crio várias Threads para pingarem no site do google, com diferentes quantidades de tentativas. Assim sempre consigo saber quando cada processo foi finalizado.
Qualquer dúvida posta…

[]'s.

Criado 20 de abril de 2009
Ultima resposta 22 de abr. de 2009
Respostas 4
Participantes 2