Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Stack overflow (https://www.clubdelphi.com/foros/showthread.php?t=53752)

aonarres 28-02-2008 17:44:41

Stack overflow
 
Hola a todos
soy nuevo en este foro pero he visto cosas muy interesantes.
Estoy haciendo una aplicación que recibe muchos datos por DDE. Estoy usando los componentes de delphi DDEClientConv y DDEClientItem. Mi aplicación recibe los datos y los muestra en una tabla, pero no hago nada más con ellos. Sin embargo, pasado un rato de estar funcionando da un error de Stack Overflow y se cierra.
¿A qué puede deberse? Agradezco mucho vuestra ayuda.

Saludos.

Delphius 28-02-2008 17:55:16

Hola aonarres,
Bienvenido a clubdelphi. Como eres nuevo te informo sobre la existencia de la guia de estilo, por favor tomate unos minutos para leerla.

Con respecto a tu duda, sin ver tu código no sabría decir a que se debe...
Si aportaras mayor información te podría ser de utilidad.
Además lo correcto sería que expusieras el texto completo y/o código del error .

Saludos,

maeyanes 28-02-2008 17:57:36

Hola...

Como bien te dice Delphius, leete la guía de estilo (link en la parte superior del foro)...

Sobre tu problema, podría deberse a algún método que se llama recursivamente y no tiene alguna condición de salida... fijate bien en ese aspecto...



Saludos...

aonarres 28-02-2008 18:06:13

Stack Overflow
 
Hola,
Gracias por tu respuesta, lo he leido y lo tendré en cuenta.
Intenteré ser más explícito.
El programa abre una serie de conexiones DDE para recibir datos, de la siguiente forma:
DDEConvUlt := TDDEClientConv.Create(self);
with DDEConvUlt do begin
OnOpen := DdeClientConv1Open;
OnClose := DdeClientConv1Close;
SetLink('PROGRAM',ticker);
OpenLink;
end;
DDEItemUlt := TDDEClientItem.Create(self);
with DDEItemUlt do begin
DdeConv := DDEConvUlt;
DdeItem := 'DATA';
OnChange := DdeClientUltChange;
end;

En el metodo DdeClientUltChange, realizo la gestión de los datos nuevos que llegan, que muestro en una tabla
StringGrid1.Cells[1,ireg] := floattostr(DDEItemUlt.Text);
En algún caso, un dato va para más de una tabla de la aplicación.

Las conexiones se hacen correctamente y los datos llegan bien. Pasado un tiempo, una hora o así, la aplicación que sirve los datos (PROGRAM) parece que se queda colgada (probablemente porque no puede servir más datos), un par de minutos después mi aplicación da el mensaje de Stack Overflow y se cierra. La aplicación que sirve los datos entonces vuelve a estar normal.

Saludos.
Andrés.

maeyanes 28-02-2008 19:14:44

Hola...

Y ese código donde se ejecuta? En algún evento? Una o más veces?

Si es así, no estás liberando la memoria usada por esos objetos, y por ahí podría venir el error....


Saludos...

aonarres 29-02-2008 13:07:11

Hola,

La creación de las conexiones DDE se hace al lanzar la aplicación. Luego, como están llegando datos a menudo, se activa el metodo Change que hace el cambio en la tabla.

Mientras el programa está abierto, se pueden abrir más conexiones DDE y no da problema. El error sale al estar la aplicación abierta recibiendo datos durante 1 hora más o menos.

Gracias por tu atención.
Andres


La franja horaria es GMT +2. Ahora son las 16:41:51.

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