Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 09-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Pienso que el problema sigue estando en esa dll. Si llamas a funciones de esa dll desde tu hilo, y se encuentra con un WaitForSingleObject... Se detiene.

Sigo pensando que si tienes las fuentes de la dll, la modifiques y recompiles...
Quizas puedas probar una solución un poco menos drástica. Sobrecarga sólo la función de la dll que te da problemas. Para eso, crea un archivo cpp con la función y la incluyes en el archivo cpp donde la uses o en la del form1. En esa sobrecarga puedes intentar el cambio WaitForSingleObject por WaitForMultipleObjects tal como comentábamos hace unos posts. O utilizando la primera técnica que te comenté para esperar (pero entonces deberás crear otro hilo mas que se llame desde tu hilo...)

Código:
# include "archivo.cpp"
Esta técnica la he utilizado para corregir algún bug del mismo Builder y me ha funcionado bien. Recompilar toda la dll es mas trabajoso pero evitará que estés pendiente de esa "sobrecarga" en cada aplicación nueva.

Por último decirte que esto que te pasa no tiene que ver con Builder ni C++ sino con Windows, WaitForSingleObject es de la API de Windows.
Responder Con Cita
  #22  
Antiguo 09-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
creo que eso de modificar a waitformultipleobjects, es mas compleajo porque cuando trate de hacerlo me salia un error que no entendia, ya que lo hice a la rapida, "cambio, pongo los parametros basicos y listo", pues no entiendo eso, pero bueno, en este momento estoy tratando de llevar al hilo todo lo de la comunicacion, pero tengo un problema creo que no es dificil pero no se que hacer, desde el hilo estoy llamando objetos ->

Form1->RadioButton2->Checkked=true;

todo compila bien pero cuando el sistema trata de procesar esa linea para el proceso y muestra un error de "violacion de acceso a memoria en form1.cpp....."
cuando llamo desde form1 que es donde incluyo=

#include "hilo.cpp"

tod me sale bien pero a la inversa no.
que puedo hacer?

y por ultimo luego de ensayar de esta forma me pondre a hacer lo que me dices de crear otro hilo y cargarlo desde mi primer hilo a ver que sucede.

Espero no perder la esperanza ya que es lo ultimo que me falta para terminar.
Responder Con Cita
  #23  
Antiguo 09-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Insisto que para llamar desde el hilo a funciones o usar propiedades de Form1, debes utilizar Synchronize.

Código:
 
#include "Unit1.h"  // la del Form1...

//-------------------------------------------
MiThread::Funcion()
{
 Form1->RadioButton2->Checkked=true; 
}

MiThread::Execute()
{
.
.
  Synchronize(Funcion);
.
.

}
Saludos.
Responder Con Cita
  #24  
Antiguo 09-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
si ya estoy usando la funcion de sincronizacion, exactamente igual que en el post, dentro de la funcion que estoy sincronizando, invoco objetos del form1 pero me salen los errores que te mencio, si incluyo form1.cpp, en hilo.cpp me sale un error de doble declaracion de parametros.
Responder Con Cita
  #25  
Antiguo 09-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No debes incluir Form1.cpp sino la cabecera.

#include Form1.h

Saludos.
Responder Con Cita
  #26  
Antiguo 09-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
esta ya la tengo incluida,la cabecera del form1.h y aun asi sale ese error.

como te digo compila bien pero cuando ejecuto y entra a procesar = (ejemplo)

Form1->RadioButton2->Checked=true;

me detiene el proceso y sale un error de acceso invalida a memoria o algo asi.
Responder Con Cita
  #27  
Antiguo 10-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Pues ese error de violación de acceso de memoria se debe a un puntero que apunta a un espacio de memoria que no pertenece a tu proceso.
Revisa tus punteros. ¿Existen todos?. ¿Alguno es nulo?.

No tiene sentido el error en Form1->RadioButton2->Checked=true; pues tanto Form1 como el hilo pertenecen a tu aplicación y por tanto es un espacio de memoria al que tienes permiso de acceso. Form1 es un puntero, como RadioButton2. Revisa con el debuguer paso a paso. ¿Que valor tienen?.

En ocasiones, fallos cometidos con puteros dan la cara mas tarde en zonas de código donde no deberían presentarse. Se debe a una corrupción de memoria.

Esa dll que usas.. ¿No estará inyectando código en otro proceso?.

En fin, el error no está donde te parece a primera vista...

Saludos.
Responder Con Cita
  #28  
Antiguo 16-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
Smile Por fin una solucion parcial

Bueno, despues de mucho pelear encontre la solucion a mi problema y realmente es sencilla, retomando: mi problema se presentaba al inicio de la comunicacion durante 2 seg paraba mi programa por completo al llamar una funcion que en su interior contenia waitforsubject.

Realmente conocia el tiempo que se demoraba mi problema, lo que hice fue insertar un sleep antes de que se ejecutara el synchronize de mi hilo, el sleep seria controlado por una variable la cual me permitia cambiar este molesto inconveniente cuando fuese necesario.

Bueno creo que fue una solucion util, algo que conocemos pero que ami no se ubiese ocurrido en su momento.

Gracias por todo tu apoyo Escafranda. Eres (el)(la) mejor. Cuidate.
Responder Con Cita
  #29  
Antiguo 19-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno, soy el.
Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Thread bendito thread...se me pierde la ventana Seba.F1 API de Windows 5 02-02-2006 00:16:30
Thread y Form progmaq Varios 4 31-03-2005 14:16:50
Problema con Thread e Indy diegofhernando Varios 3 30-03-2005 22:20:24
Problema cerrando un thread tortelini Varios 0 14-03-2005 15:21:16
Hilos o Thread DarkByte Varios 7 20-11-2003 17:10:44


La franja horaria es GMT +2. Ahora son las 06:05:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi