![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
bueno depronto creo que me e vuelto a enredar un poco, lo que necesito desde mi thread (hilo.cpp) es llamar a una funcion que se encuentra en el proceso principal (osciloscopio.cpp) una funcion definida como DWORD (as,jj,sfd,kjh);
normalmente puedo llamar funciones y demas asi: Form1->Button1->click(); pero esta funcion no la he podido llamar, la verdad e tratado de muchas formas de hacerlo pero no he hallado la forma, y en internet no logro allar informacion de este tipo de funcion. espero ser mas claro. ![]() |
|
#2
|
||||
|
||||
|
Pues como te indiqué, con el método Synchronize:
Código:
#include "Unit1.h" // la del Form1...
//-------------------------------------------
MiThread::Button1Click()
{
Form1->Button1->click(); // Llamas a tu función delde un método del thread
}
//-------------------------------------------
MiThread::OtraFuncion()
{
Form1->SendReceivePacket(....); // Llamas a tu función delde un método del thread
}
MiThread::Execute()
{
.
.
.
Synchronize(Button1Click); // Aquí utilizas tu llamada CUANDO TE INTERESE...
Synchronize(OtraFuncion); // Aquí llamas otro funcion.....CUANDO TE INTERESE...
.
.
.
}
Saludos. Última edición por escafandra fecha: 08-05-2008 a las 08:11:47. |
|
#3
|
|||
|
|||
|
bueno, la cosa no va como quiero, la verdad sigue igual, he incorporado dos soluciones siguiendo tus pasos y el consejo visto en la red pero o lo he hecho mal o no funciona.
en la primera llamo la funcion desde el hilo, y todo bien hasta que mi funcion invoca la funcion de la dll y esta a su ves procesa el waitforobject, donde todo se detiene. en la segunda, hago una "transaccion" defino las funciones en el hilo, y para usarlas en el form1, las llamo form3->sendreceivetpacket();, en cierta forma evito que el hilo procese algo en el form1(creo), pero aun asi el proceso se relentiza cuando en la dll se da el waitforobject. la verdad ya no se que hacer, voy a tratar pasando todo lo que tiene que ver con la comunicacion (inicializacion de dll, inicio de comunicacion definiendo endpoints,etc) a ver si asi no se detiene. y si no tendre que dejar de esa forma mi tesis. bueno espero que puedas darme algun consejo u idea que tengas, y antes de que se me olvide disculpa por tanto enredo en algunos casos, ya que soy 90% empirico en c++. gracias. ![]() |
|
#4
|
||||
|
||||
|
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. |
|
#5
|
|||
|
|||
|
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. |
|
#6
|
||||
|
||||
|
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);
.
.
}
|
|
#7
|
|||
|
|||
|
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.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|