FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#21
|
||||
|
||||
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" 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. |
#22
|
|||
|
|||
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. |
#23
|
||||
|
||||
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); . . } |
#24
|
|||
|
|||
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.
|
#25
|
||||
|
||||
No debes incluir Form1.cpp sino la cabecera.
#include Form1.h Saludos. |
#26
|
|||
|
|||
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. |
#27
|
||||
|
||||
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. |
#28
|
|||
|
|||
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. |
#29
|
||||
|
||||
Bueno, soy el.
Saludos. |
|
|
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 |
|