Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 19
pulpin Va por buen camino
igualmente gracias por tu ayuda escafranda, voy a ver como puedo resolver este inconveniente, espero no se me salga de las manos.

post: tu siempre salvandome de tanto enredo, ya te debo como 5.
Responder Con Cita
  #2  
Antiguo 07-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 19
pulpin Va por buen camino
aun sigo en problemas

bueno estube investigando, sobre waitformultipleobjects, y segun lo que lei si utilizo esta funcion puedo evitar que los demas hilos se interrunmpan, estoy en lo correcto o no puedo usarlo para este motivo, espero tu opinion?

por ultimo alguna idea de como hacer el cambio.

Última edición por pulpin fecha: 07-05-2008 a las 05:10:51.
Responder Con Cita
  #3  
Antiguo 07-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno, por lo que dices, te debes haber decidido por recompilar la dll. En principio lo fácil sería hacer ese cambio que apuntas. Cambiar la función
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);[FONT=verdana,geneva,lucida,'lucida grande',arial,helvetica,sans-serif]

por:

[/font]DWORD WINAPI WaitForMultipleObjects(
__in DWORD nCount,
__in const HANDLE* lpHandles,
__in BOOL bWaitAll,
__in DWORD dwMilliseconds
);

La diferencia es que el hilo lo debes pasar como una matriz de hilos, es decir un puntero al handle en cuestión. En nCount pones 1 (un sólo hilo). En este caso bWaitAll no tiene mucho sentido, colócalo en true.

Por último aquí tienes más información: WaitForSingleObject y WaitForMultipleObjects

Saludos.
Responder Con Cita
  #4  
Antiguo 07-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 19
pulpin Va por buen camino
estube pensando en otra solucion sin modificar el dll.
bueno segun lei en internet es posible evitar este inconveniente si dentro del hilo seda el waitforobject, el codigo de la funcion principal se seguiria procesando normalmente. pero al ensayar tube un inconveniente que no se como buscar, mi programa es:

Form1-> "el cual es el que inicia normalmente, donde se cargan todas las funciones donde se inicia todo mi programa y el qye normalmente esta pendiente de los botonoes y demas metodos."

Form2->" en el cual se desprende una pequeña ventana en la cual puedes editar una imagen que se encuantra en el Form1 para luego imprimirla."

Form3->" y el ultimo y mas doloroso, un objeto thread en el cual lo que hago es llamar metodo void Del form1 , en la cual se lleva acabo una graficacion y recepcion de datos de un microcontrolador"

lo que quiero es hacer la recepcion de datos dentro del hilo ya que la recepcion es la que detiene el proceso esta contiene el waitforobject, luego de recibir los datos me voy para el void del form1 y grafico y luego vuelvo para la siguiente recepcion. sera que asi me funciona?

lo que no me ha dejado llevar acabo mi plan es uqe la funcion que recibe los datos esta definida de la siguiente forma:

DWORD SendReceivePacket(BYTE *SendData, DWORD SendLength, BYTE *ReceiveData,DWORD *ReceiveLength, UINT SendDelay, UINT ReceiveDelay);
// definida en el form1

mi preguntas es como puedo llamar esta funcion desde la hebra "form3"?

gracias, espero tu opinion.
Responder Con Cita
  #5  
Antiguo 08-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno... Para usar elementos de la VCL en un thread, deba asegurarse la seguridad, valga la redundancia. Debes revisar el método Synchronize. Y creo que debes hacerlo así pues quieres llamas a una función de una clase de Form1 a la que no pertenece tu thread. Cualquier modificación en objetos VCL debe llevarse a cabo de esta manera.

En la ayuda de Builder tienes un ejemplo demostrativo de como usar Synchronize.

Saludos.
Responder Con Cita
  #6  
Antiguo 08-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 19
pulpin Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 08-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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...
.
.
.

}
¿Complicado?... Bueno, no tanto, pero desde un thread debe ser asi...

Saludos.

Última edición por escafandra fecha: 08-05-2008 a las 09:11:47.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 01:16:30
Thread y Form progmaq Varios 4 31-03-2005 15:16:50
Problema con Thread e Indy diegofhernando Varios 3 30-03-2005 23:20:24
Problema cerrando un thread tortelini Varios 0 14-03-2005 16:21:16
Hilos o Thread DarkByte Varios 7 20-11-2003 18:10:44


La franja horaria es GMT +2. Ahora son las 14:28:44.


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