Ver Mensaje Individual
  #4  
Antiguo 05-03-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bien. Yo crearía x al crear Form1 y no con un evento de botón que puede ejecutarse o no a gusto del usuario. x debe ser un miembro de Form1 creado y que se destruya en el destructor de Form1. Pon un punto de parada en miTrhead, para detectar si es tu objeto u otro el que ejecuta Terminate, (puedes controlar si un miembro de valor conocido y esperable lo tiene o no, para saber si efectivamente miThread apunta a tu tarea que se está ejecutando).

Los miembros static de una clase son un poco liosos. Deben estar declarados e inicializados al declarar la clase, pues su valor será el mismo para todos los objetos que existan de esa clase. Y sólo se pueden modificar por funciones también declaradas como static. En tu caso es preferible que x exista en todo momento para contro0lar miThread. El problema está en si quieres que exixtan varias tareas capturar ejecutandose al mismo tiempo. Esto te obliga a crear una matriz de punteros en Form1 y tener todos ellos guardados para ejecutar, en un bucle, por ejemplo x->Terminate().

ANALIZA ESTO: El hecho de que
Código:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 x = new Capturar();
 x->Funcion1(); //aqui dentro es donde llega el momento de capturar llama a miThread = new ThredPackets(adhandle)

}
significa que cada vez que pulsas Button2, creas y ejecutas una tarea nueva. x apuntará a la última creada, pero las anteriores "se han perdido en memoria", pues no tienes ningún puntero que las referencie. Existirán mientras exista tu aplicación, de forma que no las puedes parar tu sino terminarán según su código programado.

Última edición por escafandra fecha: 05-03-2008 a las 21:31:13.
Responder Con Cita