| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 24 Oct, 2004 6:24 pm Asunto: Cambiar tipo de Serie para mostrar en un TChart |
|
|
Hola. Tengo un TChart que muestra una serie de datos guardados en un TBarSeries (Series1). Para cambiar el tipo de la serie, en http://www.steema.com/support/faq/NewVCL/FAQ_VCL_SERIES.htm#Q5 me proponen usar | Código: | ChangeSeriesType( Series1, __classid(TBarSeries) ); | siendo TBarSeries el tipo en el que quiero convertir mi serie (podría ser TPieSeries, THorizBarSeries, TLineSeries, ...).
No hay ningún error al compilar y es muy rápido redibujando el TChart con el nuevo tipo de serie, sin embargo al compilar me produce el Warning | Cita: | | [C++ Warning] Principal.cpp(202): W8030 Temporary used for parameter 'ASeries' in call to '_fastcall ChangeSeriesType(TChartSeries * &,TMetaClass *)' | y no he encontrado el modo de quitármelo.
¿Alguna sugerencia?
Gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 24 Oct, 2004 6:42 pm Asunto: |
|
|
| Código: | ChangeSeriesType(static_cast<TChartSeries*>(Series1),
__classid(TBarSeries)); |
o bien:
| Código: | TChartSeries* serie = Series1;
ChangeSeriesType(serie, __classid(TBarSeries)); |
|
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 24 Oct, 2004 6:59 pm Asunto: |
|
|
Gracias _Leo, más rápido casi que la ayuda del Builder !!!
Para elegir convenientemente la respuesta ¿no consume más recursos la segunda solución que aportas? No vuelvo a usar la nueva serie en la función en que llamo a ChangeSeriesType().
Saludos |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 24 Oct, 2004 7:25 pm Asunto: |
|
|
Si, la segunda al compilarla ocupa 7 bytes mas:
| Código: | // 26 bytes
mov eax, [ebp-0x04]
mov edx, [eax+0x000002fc]
mov [ebp-0x0c], edx
lea eax, [ebp-0x0c]
mov edx, [Series::TBarSeries::]
call Chart::ChangeSeriesType(Teengine::TChartSeries*&, const System::TMetaClass*) |
Y la primera:
| Código: | // 19 bytes
mov eax, [ebp-0x04]
add eax, [Series::TBarSeries::]
call Chart::ChangeSeriesType(Teengine::TChartSeries*&, const System::TMetaClass*)
|
|
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 24 Oct, 2004 7:45 pm Asunto: |
|
|
| Por añadir un dato mas, la segunda es lo mismo que hace el compilador al dar el aviso, solo que al hacerlo nosotros mismos ya no sale el aviso. |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 24 Oct, 2004 8:04 pm Asunto: |
|
|
Cuánto me queda por aprender ... (seguro que saber ensamblador me haría mejorar mis programas pero no tengo tiempo, de momento).
En mi pregunta hablaba más bien de recursos de memoria del PC (mi aplicación de momento tiene dos hilos de ejecución y bastantes componentes, además de ir guardando en memoria unos cuantos mapas y vectores (o listas, aún no lo tengo probado ni decidido) que podrían contener centenares (¿miles?) de datos. También usa muchos recursos de CPU pues se trata de algoritmos que recorren exhaustivamente los mapas buscando datos, añadiendo nuevos y actualizándo los existentes).
No sé si al guardar una copia de Series1 se toma más memoria RAM o realmente el proceso ya toma esa "zona extra de memoria" para hacer copias temporales al usar static_cast<TChartSeries*>(Series1). ¿Cómo puedo averiguar el uso de memoria de mi programa en ejecución sin preguntarte cada vez que tenga dudas existenciales de este tipo.
Gracias de nuevo. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 24 Oct, 2004 8:16 pm Asunto: |
|
|
| No me complico mucho en esto, uso la lista de procesos del administrador de tareas de Windows, añadiendo o quitando las columnas que necesite en cada momento según el tipo de recursos que quiero controlar. |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 24 Oct, 2004 8:31 pm Asunto: |
|
|
| Lo dicho, queda mucho que aprender ... tampoco conocía las opciones del administrador de tareas ni se me ocurría que me podía dar tanta información. |
|
| Volver arriba |
|
 |
|