![]() |
Problemas con un Hilo
Hola, tengo un problema con un hilo que he creado. Paso a explicarme.
Primero cree el proyecto y le puse un boton para que ejecute mi hilo: Unit1.h: Código:
//--------------------------------------------------------------------------- Código:
//--------------------------------------------------------------------------- Código:
#ifndef HiloDBGH ![]() ¿Alguna idea de que puede estar pasando? |
Incluye HiloDBG en el proyecto, no en el código, es decir: elimina esta línea:
Código:
#include "HiloDBG.cpp" Saludos. |
Amigo si hago eso me salen estos errores:
[C++ Error] Unit1.cpp(16): E2141 Declaration syntax error [C++ Error] Unit1.cpp(69): E2451 Undefined symbol 'HiloDebugger' en esta linea: HDebugger *HiloDebugger; y mas errores en cualquier parte del codigo donde haga referencia a HiloDebugger. |
vale, solucionado, tenias razon pero me faltó poner el #include "HiloDBG.h", solo eso.
Ahora me encuentro con otros problemas. En el hilo tengo un bucle que puede ser muy largo por lo que he creado dos botones, uno para pausar o continuar y otro para abortar y que termine el hilo. Hice esto: Código:
void __fastcall TFormPrincipal::ButtonAbortarClick(TObject *Sender) |
Creo que tengo que hacer algo asi:
Código:
void __fastcall TFormPrincipal::FormClose(TObject *Sender, TCloseAction &Action) Código:
if(HDebugger->Suspended == true) En Unit1.cpp puedo hacer HiloDebugger->Suspended sin problemas porque creo el hilo con "new" pero en HiloDBG.cpp no puedo y necesito acceder a esa propiedad desde la funcion externa. ¿tengo que crear mi funcion como miembro de la clase para acceder? |
Cambia
#include "HiloDBG.cpp" por #include "HiloDBG.h" Añade el archivo HiloDBG.cpp desde Peoyect -> Add to proyect -> HiloDBG.cpp Código:
#include <vcl.h> Código:
#include <vcl.h> Saludos. |
Eso ya me funciona pero el problema ahora es que si pongo:
Código:
//--------------------------------------------------------------------------- He intentado esto: Código:
//Terminamos el hilo del debugger Código:
//Terminamos el hilo del debugger Código:
if(HiloDebugger->Suspended == true) |
Es que tu hilo no tiene bucle por lo tanto termina solo tras ejecutar la función Execute. Sólo te queda liberarlo (Free) si no pones FreeOnTerminate = true en el constructor, en cuyo caso se libera sólo.
Saludos. |
bueno si que tiene bucle lo que pasa es que el codigo es bastante largo y para hacerlo mas sencillo lo puse asi pero dentro de ActualizarDatos hay un do while que es para fuerza bruta y puede ser eterno por lo que es muy importante poder pausarlo y pararlo.
De momento he conseguido hacerlo de una manera algo chapucera ya que he creado una variable global de tipo AnsiString y cuando doy a pausar guardo la cadena en dicha variable global y luego doy a Terminated el valor true y tengo como condicion para salir del bucle que si Terminated == true salga y luego al dar a continuar pues recupero el valor de la variable global y sigo por ahi. La cosa se ha liado bastante pero funciona aunque me gustaria hacerlo de la forma mas correcta ya que de este modo al pausar lo que hago realmente es terminar el hilo y al continuar lo vuelvo a crear. |
Esa variable global si es una chapuza. Tu buclq debe tener la condición de terminar si Terminated == ture:
Código:
void __fastcall TMyThread::Execute() Saludos. |
lo que pasa es que el bucle no está dentro de la funcion del hilo sino que ciertamente esta en una funcion la cual es ejecutada por la funcion del hilo por lo que el Terminated asi no lo puedo usar y ademas esa funcion no pensé meterla nunca en un hilo por lo que para eso uso otra variable y ahora quiero rediseñar todo para dejarlo correctamente ya que ahora todo el codigo de dicha funcion solo se ejecuta desde la funcion del hilo asi que creo que lo mejor es olvidarme de la funcion y meter ese codigo dentro de actualizardatos y cambiar todo para optimizar. Ya te diré lo que sea cuando le meta mano.
|
La franja horaria es GMT +2. Ahora son las 05:05:36. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi