Ver Mensaje Individual
  #6  
Antiguo 07-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
Ahora no veo donde pones en marcha tu thread. No ejecutas Funcion1 en el código que me expones. Digo esto, porque miThtread será creado cada vez que ejecutes Funcion1 y puedes "acumular threads incontrolados".

El hecho de que sea una variable global, en principio no debe influir si la lógica de programación es correcta, aunque al estar programando orientado a objetos, no tiene sentido una variable global que sólo va a utilizar una clase y a la que no se accede desde otro punto.

No se como tienes programada el Thread. Cuando utilizo threads, creo un elemento TThread desde la opción new del Builder. Me crea un prototipo de clase derivada de TThread que yo termino de definir e implementar.

La función Terminate() No termina inmediatamente con el Thread, sino que lo hace tan pronto como sea posible, por lo que la lógica de programación puede influir. Sólo chekeando el valor de Thread->Terminated, sabrás que ha terminado. Para terminar inmediatamente puedes usar la API TerminateThread.

Los puntos de parada los generas al colocar el cursor un una línea de código y pulsar F5. Cuando el código que se ejecuta llege a ese punto, se para y puedes comprobar valores, ejecutar paso a paso....Debugear.

En definitiva:

1) Controla que tu puntero miThread apunta realmente a lo que tu quieres.

2) Ejecuta el código que tengas en la función miThread->Execute() paso a paso y comprueba que no penetras en un bucle sin fin.

3) Recuerda la API TerminateThread para terminar a la fuerza, claro que esto te puede hacer perder datos.

Saludos.

Última edición por escafandra fecha: 07-03-2008 a las 19:41:10. Razón: Mal funcionamiento del editor
Responder Con Cita