control de Procesos

13/02/2004 - 17:00 por Carlos Pérez Sáez | Informe spam
Buenas, necesito realizar una aplicacion que lanze un
proceso (un ejecutable .exe), y CUANDO TERMINE, lea el
tiempo de cpu y memoria consumidos por el proceso.

Esto lo hago con la clase Process, lanzo el proceso y me
preparo el evento para que cuando termine, active el evento
y pueda interrogar al proceso.

El problema esta en que cuando se activa el evento ( evento
Exited) el proceso ya ha terminado y los datos que quiero
consultar ya no estan disponibles (eso dice el error que
genera).

He intentado hacerlo como viene en el ejemplo de Process,
que es estar preguntando todo el rato hasta que termina,
lo que pasa que de ese modo no me da exacto el resultado,
ya que pregunta y despues acaba, y yo necesito el dato exacto.

Yo creo que el camino estaria en hacer de alguna forma que
el proceso antes de acabar se suspenda o algo asi.

La pregunta entonces es si alguien sabe como calcular el
tiempo de cpu que un proceso lanzado por mi gasta EXACTAMENTE.

Un saludo y gracias, pego el codigo para que os pongais en
contexto:

using System;
using System.Diagnostics;
using System.Threading;

namespace lanzadorProcesos
{
/// <summary>
/// Descripción breve de Class1.
/// </summary>
class Class1
{
/// <summary>
/// Punto de entrada principal de la aplicación.
/// </summary>
[STAThread]

static void Main(string[] args)
{
claseLanzadora miclase=new claseLanzadora();
miclase.lanzaproceso();
Console.Write("Fin");


}

}
class claseLanzadora
{
Process x;
public void lanzaproceso()
{
//lanzamos el proceso aqui
x=Process.Start(@"c:\windows\system32\cmd.exe");
x.EnableRaisingEvents=true; //aqui le digo que me active
los eventos
x.Exited += new
System.EventHandler(this.Exited_proceso); //linko el evento
a mi funcion
x.WaitForExit(); //espero a que termine el proceso
Console.WriteLine("Pulse una tecla para continuar");
Console.ReadLine();

}


//funcion para manejar el evento de acabado el proceso.
private void Exited_proceso (object sender, EventArgs e)
{

Console.Write(x.TotalProcessorTime.Milliseconds.ToString());
//No funciona porque ya ha acabado
//¿que hacer aqui??

Console.WriteLine("Fin exited proceso");
}

}
}
 

Leer las respuestas

#1 Renato Amaya
15/02/2004 - 13:03 | Informe spam
BUeno pues podrias tratar en la funcion destructora de la clase. O si
estas trabajando con ventanas podias hacer el calculo justo cuando
QueryUnload la ultima ventana.

... Espero q te sirva,

Preguntas similares