Ver Mensaje Individual
  #1  
Antiguo 07-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
Problemas con creación de hilo

Hola amigos, tengo esto en un botón del form:
Código PHP:
Depurador->InitDebug(NULL,MODE_ATACH_BY_WINDOW_NAME,wndName,NULL); //Inicializamos el debugger
Depurador->LoopDebug(); //Arrancamos el bucle de depuracion
//::Sleep(20);
Depurador->SetBP(DIR_BP_IDS); 
El metodo LoopDebug crea el hilo:
Código PHP:
void TDebugger::LoopDebug(void)
{
    
//Creo el hilo suspendido
    
HiloDepuracion = new(std::nothrowTHiloDebugger(false,Mode,PathFile,NameWindow,pid,this); 
El problema que tengo es que tarda menos en ejecutarse la siguiente linea del botón que internamente hace esto:
Código PHP:
bool THiloDebugger::SetBP(DWORD address)
{
        
bool salida true;
        
BYTE bp 0xCC;
        
unsigned long retval 0;
        
BYTE original;
        
TBP MyBP;
        
int pos;

        
pos SearchBPOnList(address, &MyBP); 
que en crearse el hilo y ejecutar cosas como estas:
Código PHP:
void __fastcall THiloDebugger::Execute()
{
        
DEBUG_EVENT DebugEv;
        
HANDLE CurrentExceptionThread;
        
DWORD dwContinueStatus;
        
int Error;
        
TDll *ItemDLL;
        
bool salir=false;

        
ListaBPs = new TList;
        
ListaDlls = new TList;
        
ListaThreads = new TList;

        
Synchronize(OnInitLoopDebugThread); //Usaremos este evento para inicialización de variables en la clase usuario si se requiere. 
y cuando intento poner el Breakpoint hace esto internamente:
Código PHP:
int THiloDebugger::SearchBPOnList(DWORD addresspBP lpMyBP)
{
        
pBP BP;
        
int x 0;
        
bool encontrado false;
        for(
x=0ListaBPs->Countx++)
        {
                
BP = (TBP*)ListaBPs->Items[x];
                if(
BP->dir == address)
                { 
Con lo que me encuentro con que al poner el Breakpoint lo va a buscar en la TList ListaBPs y esta aun no se ha creado. Lo he solucionado poniendo un ::Sleep(20) justo antes de poner el Breakpoint pero creo que es una autentica chapuza. ¿que podría hacer para no tener este problema?
Intenté poniendo después de crear el hilo con:
Código PHP:
HiloDepuracion->WaitFor(); 
pero me cansé de esperar y no regresa nunca porque supongo que eso espera hasta que termine el hilo y el hilo es el que tiene el bucle de los eventos así que no va a salir nunca.
Responder Con Cita