Ver Mensaje Individual
  #3  
Antiguo 23-12-2015
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Reputación: 14
mizzard Va por buen camino
Retomo el tema

Buenas tardes de nuevo,

Retomo el hilo porque lo estoy planteando con threads y me estoy armando un lio.

Por casualidades me he dado cuenta que cuando mando el email:

Código:
Form1->IdSMTP1->Connect();
Form1->IdSMTP1->Send(Form1->IdMessage1);
Puede darse el caso de que el servidor tarde más de lo esperado, por lo que me propongo usar threads (nunca las he usado).

Basándome en el siguiente video:
https://www.youtube.com/watch?v=1g4db90Mfgw

Adapto mi código de tal forma que parece ser que funciona, pero tengo los siguientes problemas:

1º Antes llamaba a una función que se encargaba de gestionar los envíos, pasándole un parámetro para actuar de una forma u otra (aprovechando el codigo de envio)

Ahora al tener que insertar el codigo en la Unit2.cpp dentro de la sección de void __fastcall TConnectThread::Execute() he sacado el codigo de la funcion y no sé como hacerlo para que cuando se ejecute el thread que se active la funcion que tenia antes estilo:
Código:
void enviarEmail(int opcion);
Eso o actuar sobre variables globales, pero me da a mi que es mejor pasársela por función.

2º En el Unit1.cpp

Cuando deseo llamar al Thread, utilizo:
Código:
myThread1->Start();
Ya que tengo la siguiente linea:

Código:
TConnectThread *myThread1 = new TConnectThread(true);
Al principio del todo (inmediatamente despues de los includes, de los #pragma link, TForm1 *Form1)

No sé si es que lo estoy utilizando mal o que es lo que pasa, que mi objetivo es utilizar un timer programado con un tiempo para que si se queda enganchado el servidor de envio que aborte el thread de forma drástica.

En el timer pongo:
Código:
myThread1->Terminate();
Y dentro del thread en la condicion while añado && !Terminated, pero claro funciona cuando no se engancha en el servidor
Si pruebo con esto otro
Código:
	unsigned long exitCode;
	GetExitCodeThread(myThread1, &exitCode);
	TerminateThread(myThread1, exitCode);
Parando el timer posteriormente, indicar que el thread no para, ya que continua.


CONCLUSIÓN:

Me gustaria utilizar un thread para evitar cuelgues del programa cuando se envian varios emails y el servidor puede que se caiga, para ello necesito enviar variables al thread para aprovechar la funcion de envio que utilizaba y saber como abortar en caso de que me desborde el timer

¿Alguna orientación de como hacerlo?

Muchas gracias y un abrazo!
Responder Con Cita