PDA

Ver la Versión Completa : Que problema con las INDY!!!!!


diegofhernando
12-11-2003, 22:45:10
Que tal.... me imagino que el problema que tengo lo han tenido algunos de ustedes, es por eso que creo que me puedan aportar una solucion... Estoy usando los componentes TCP de las Indy, cuando desde un cliente envio una respuesta al servidor este debe mostrar un form, el codigo lo pongo en el Execute del TCPServer pero desastrosamente el form aparece a medias, y no solo eso, si envio un stream que deba ser interpretado en otro form sucede lo mismo... y ya llevo 14 con este problema y nada, si de casualidad alguno tiene la solucion por favor... o si saben donde encontrarla igual...

Salu2:cool:

jachguate
12-11-2003, 22:50:55
No entiendo que significa eso de "el form aparece a medias?", pero parece un problema gráfico, no de las Indy. Porque no explicas bien cual es tu problema, y quizas algun trozo de código.

Hasta luego.

;)

diegofhernando
12-11-2003, 23:45:45
muy bien...

procedure TForm1.idTCPSocketServer(//parametros);
var
algo: string;
begin

algo:= AThread.Connection.ReadLn; // aqui leo la respuesta
// del cliente.

if algo = 'mostrar' then
begin
form1.hide;
form2.show; // aqui es donde no funciona.... se congela
// el form2, solo aparece el cuadrillo donde
// deberia estar.
end;

end;


pero si pongo el mismo codigo en un timer funciona...



procedure TForm1.idTCPSocketServer(//parametros);
var
algo: string;
begin

algo:= AThread.Connection.ReadLn; // aqui leo la respuesta
// del cliente.

if algo = 'mostrar' then
begin
timer1.enabled:= true;
end;

end;

cuando se ejecuta el evento onTimer que tiene Form2.Show; funciona perfectamente. Es decir que mientras este dentro del envento Execute del Server no puedo hacer nada con otros Forms.

Julià T.
13-11-2003, 01:22:06
supongo que por lo que indicas, mientras está "trabajando" en la connexion, el form parace que se quede colgado (pasa siempre), para ello puedes colocar el componente TidAntefreezee (Indy Misc), con lo que supongo que solucionarás el problema.

jachguate
13-11-2003, 02:18:12
Lo que ocurre es que estas invocando el método Show desde el hilo de ejecución de la conexión (Indy es un Servidor Multi-Hilos, y debieras hacerlo desde el hilo principal de la aplicación). Por ello es que, al terminar o suspenderse la ejecución del hilo, la forma queda congelada.

Para ello, podes valerte del método Synchronize del hilo.

Hasta luego.

;)

diegofhernando
13-11-2003, 17:42:59
Esta bien gracias por sus comentarios voy a probar lo que me dices, lo del AntiFreeze ya lo probe pero no funcionó...

Salu2:cool:

Julià T.
13-11-2003, 20:13:37
No me fijé que era dentro de un thread, para ello, como dice jachguate, dentro del thread utiliza el sychronize para cualquier acceso a componentes que no incluyas en el thread