In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Datos de la memoria y datos del disco

Foro de Xailer profesional en español
Responder
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Datos de la memoria y datos del disco

Mensaje por jrcpoli »

Saludos:
En la aplicación que estoy pasado del sistema anterior a Xailer tenía en
una pantalla de información del tipo acerca de... una serie de datos de
información sobre la memoria y capacidad del disco donde se está ejecutando
la aplicación, algunas cosas ya las modificado pero tengo dos cosas que no
he podido hacerlas y otra la he hecho pero me gustaría saber si es correcto
lo que he realizado.
1º.- Memoria libre : ¿Es correcto esto que hecho?
#include "hbmemory.ch"
** Memoria libre
nMemoriaLibre := Memory(HB_MEM_RUN) // Da KB.
2º.- Recursos del sistema : Esto no sé si existe alguna función
especifica, se que en la API de Windows se puede obtener con
GlobalMemoryStatus(dwMemoryLoad), pero como implementarla a mi no me ha
salido hay por medio una estructura de datos MEMORYSTATUS la cantidad que
sale son el tanto por ciento de recursos libres del sistema por lo tanto
sale maximo 100.
3º.- Capacidad Total del disco donde se está ejecutando la aplicación.
4º.- Capacidad Libre esta es facil puesto que hay una función
especifica.
Gracias anticipadas.
José Ramón Castro Polinio.
José Ramón Castro.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Datos de la memoria y datos del disco

Mensaje por jfgimenez »

José,
> 1º.- Memoria libre : ¿Es correcto esto que hecho?
>
> #include "hbmemory.ch"
>
> ** Memoria libre
> nMemoriaLibre := Memory(HB_MEM_RUN) // Da KB.
No creo que sea correcto. La memoria en windows es un recurso dinámico, es
decir, windows da o quita memoria a cada proceso en función de las
necesidades concretas de cada momento. Y eso hablando de memoria física,
porque en realidad un programa podría solicitar un bloque de memoria de 2GB
y windows se lo da, aunque físicamente el ordenador tenga sólo 256MB
> 2º.- Recursos del sistema : Esto no sé si existe alguna función
> especifica, se que en la API de Windows se puede obtener con
> GlobalMemoryStatus(dwMemoryLoad), pero como implementarla a mi no me ha
> salido hay por medio una estructura de datos MEMORYSTATUS la cantidad que
> sale son el tanto por ciento de recursos libres del sistema por lo tanto
> sale maximo 100.
En win32, que yo sepa, no hay una forma fiable de conocer los recursos
usados/libres del SO
> 3º.- Capacidad Total del disco donde se está ejecutando la aplicación.
>
> 4º.- Capacidad Libre esta es facil puesto que hay una función
> especifica.
Para ambas puedes usar la función del API GetDiskFreeSpace()
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Datos de la memoria y datos del disco

Mensaje por jrcpoli »

Saludos:
Para poder utilizar las funciones de la API de Windows como debo
implementarlas en xHabourd, he visto por ahí esto:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
/*
BOOL CopyFile(
LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
Esta es información es del API y no coincide con el prototipado que estabas
haciendo
*/
XA_FUNC(APICOPYFILE)
{
hb_retl( CopyFile( hb_parc( 1 ), hb_parc( 2 ), FALSE )
}
#pragma ENDDUMP
En mi caso como implementaria GetDiskFreeSpace()
Teniendo en cuenta que la API de Windows contiene la siguiente información:
BOOL GetDiskFreeSpace(
LPCTSTR lpRootPathName, // address of root path
LPDWORD lpSectorsPerCluster, // address of sectors per cluster
LPDWORD lpBytesPerSector, // address of bytes per sector
LPDWORD lpNumberOfFreeClusters, // address of number of free clusters
LPDWORD lpTotalNumberOfClusters // address of total number of clusters
);
Y que a mí mi interesa el valor de lpRootPathName, y como sería
posteriormente la llamada desde Xailer.
Haber si con este ejemplo puedo coger de una vez la implementación en
xhabourd de las llamadas a la API y su forma de utilizarlas posteriormente.
Gracias anticipadas.
José Ramón Castro Polinio.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=44c5eaa2@news.xailer.com...]44c5eaa2@news.xailer.com...[/email]
> José,
>
>> 1º.- Memoria libre : ¿Es correcto esto que hecho?
>>
>> #include "hbmemory.ch"
>>
>> ** Memoria libre
>> nMemoriaLibre := Memory(HB_MEM_RUN) // Da KB.
>
> No creo que sea correcto. La memoria en windows es un recurso dinámico, es
> decir, windows da o quita memoria a cada proceso en función de las
> necesidades concretas de cada momento. Y eso hablando de memoria física,
> porque en realidad un programa podría solicitar un bloque de memoria de
> 2GB
> y windows se lo da, aunque físicamente el ordenador tenga sólo 256MB
>
>
>> 2º.- Recursos del sistema : Esto no sé si existe alguna función
>> especifica, se que en la API de Windows se puede obtener con
>> GlobalMemoryStatus(dwMemoryLoad), pero como implementarla a mi no me ha
>> salido hay por medio una estructura de datos MEMORYSTATUS la cantidad que
>> sale son el tanto por ciento de recursos libres del sistema por lo tanto
>> sale maximo 100.
>
> En win32, que yo sepa, no hay una forma fiable de conocer los recursos
> usados/libres del SO
>
>
>> 3º.- Capacidad Total del disco donde se está ejecutando la aplicación.
>>
>> 4º.- Capacidad Libre esta es facil puesto que hay una función
>> especifica.
>
> Para ambas puedes usar la función del API GetDiskFreeSpace()
>
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>
José Ramón Castro.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Datos de la memoria y datos del disco

Mensaje por jfgimenez »

José Ramón,
> En mi caso como implementaria GetDiskFreeSpace()
>
> Teniendo en cuenta que la API de Windows contiene la siguiente
> información:
>
> BOOL GetDiskFreeSpace(
> LPCTSTR lpRootPathName, // address of root path
> LPDWORD lpSectorsPerCluster, // address of sectors per cluster
> LPDWORD lpBytesPerSector, // address of bytes per sector
> LPDWORD lpNumberOfFreeClusters, // address of number of free clusters
> LPDWORD lpTotalNumberOfClusters // address of total number of clusters
> );
>
> Y que a mí mi interesa el valor de lpRootPathName, y como sería
> posteriormente la llamada desde Xailer.
>
> Haber si con este ejemplo puedo coger de una vez la implementación en
> xhabourd de las llamadas a la API y su forma de utilizarlas
> posteriormente.
Te la escribo al vuelo (no está probada):
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( GETDISKFREESPACE )
{
DWORD lpSectorsPerCluster; // address of sectors per cluster
DWORD lpBytesPerSector; // address of bytes per sector
DWORD lpNumberOfFreeClusters; // address of number of free clusters
DWORD lpTotalNumberOfClusters; // address of total number of clusters
hb_retl( GetDiskFreeSpace( hb_parc( 1 ), &lpSectorsPerCluster,
&lpBytesPerSector,
&lpNumberOfFreeClusters,
&lpTotalNumberOfClusters ) );
hb_stornl( lpSectorsPerCluster, 1 );
hb_stornl( lpBytesPerSector, 2 );
hb_stornl( lpNumberOfFreeClusters, 3 );
hb_stornl( lpTotalNumberOfClusters, 4 );
}
#pragma ENDDUMP
Por cierto, si metes la rutina en un fichero .c en vez de .prg, las líneas
#pragma NO tienes que ponerlas.
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Datos de la memoria y datos del disco

Mensaje por jrcpoli »

Saludos:
Dos cosas primero en mi ignorancia creo que falta lpRootPathName en la
implementación, dime si es correcto lo que digo o estoy equivocado.
Segundo te preguntaba el mi anterior cuestión, ¿Como realizaba
posteriormente la llamada desde Xailer?
Gracias.
José Ramón Castro Polinio
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:44c6338e$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Ramón,
>
>> En mi caso como implementaria GetDiskFreeSpace()
>>
>> Teniendo en cuenta que la API de Windows contiene la siguiente
>> información:
>>
>> BOOL GetDiskFreeSpace(
>> LPCTSTR lpRootPathName, // address of root path
>> LPDWORD lpSectorsPerCluster, // address of sectors per cluster
>> LPDWORD lpBytesPerSector, // address of bytes per sector
>> LPDWORD lpNumberOfFreeClusters, // address of number of free clusters
>> LPDWORD lpTotalNumberOfClusters // address of total number of
>> clusters
>> );
>>
>> Y que a mí mi interesa el valor de lpRootPathName, y como sería
>> posteriormente la llamada desde Xailer.
>>
>> Haber si con este ejemplo puedo coger de una vez la implementación en
>> xhabourd de las llamadas a la API y su forma de utilizarlas
>> posteriormente.
>
> Te la escribo al vuelo (no está probada):
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> XA_FUNC( GETDISKFREESPACE )
> {
> DWORD lpSectorsPerCluster; // address of sectors per cluster
> DWORD lpBytesPerSector; // address of bytes per sector
> DWORD lpNumberOfFreeClusters; // address of number of free clusters
> DWORD lpTotalNumberOfClusters; // address of total number of clusters
>
> hb_retl( GetDiskFreeSpace( hb_parc( 1 ), &lpSectorsPerCluster,
> &lpBytesPerSector,
> &lpNumberOfFreeClusters,
> &lpTotalNumberOfClusters ) );
> hb_stornl( lpSectorsPerCluster, 1 );
> hb_stornl( lpBytesPerSector, 2 );
> hb_stornl( lpNumberOfFreeClusters, 3 );
> hb_stornl( lpTotalNumberOfClusters, 4 );
> }
>
> #pragma ENDDUMP
>
> Por cierto, si metes la rutina en un fichero .c en vez de .prg, las líneas
> #pragma NO tienes que ponerlas.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>
José Ramón Castro.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Datos de la memoria y datos del disco

Mensaje por jfgimenez »

José Ramón,
> Dos cosas primero en mi ignorancia creo que falta lpRootPathName en la
> implementación, dime si es correcto lo que digo o estoy equivocado.
No, no falta. Es el parámetro hb_parc( 1 )
> Segundo te preguntaba el mi anterior cuestión, ¿Como realizaba
> posteriormente la llamada desde Xailer?
FUNCTION EspacioLibreEnC()
LOCAL nSectoresPorCluster, nBytesPorSector, nClustersLibres,
nClustersTotal
IF GetDiskFreeSpace( "C:", @nSectoresPorCluster, @nBytesPorSector,
@nClustersLibres, @nClustersTotal )
RETURN nSectoresPorCluster * nBytesPorSector * nClustersLibres
ENDIF
RETURN 0
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Datos de la memoria y datos del disco

Mensaje por jrcpoli »

Gracias Jose F. Gimenez, lo pruebo y te cuento cual es el resultado, aunque
seguro que es el que espero.
José Ramón Castro Polinio.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=44c63c15@news.xailer.com...]44c63c15@news.xailer.com...[/email]
> José Ramón,
>
>> Dos cosas primero en mi ignorancia creo que falta lpRootPathName en la
>> implementación, dime si es correcto lo que digo o estoy equivocado.
>
> No, no falta. Es el parámetro hb_parc( 1 )
>
>
>> Segundo te preguntaba el mi anterior cuestión, ¿Como realizaba
>> posteriormente la llamada desde Xailer?
>
> FUNCTION EspacioLibreEnC()
>
> LOCAL nSectoresPorCluster, nBytesPorSector, nClustersLibres,
> nClustersTotal
>
> IF GetDiskFreeSpace( "C:", @nSectoresPorCluster, @nBytesPorSector,
> @nClustersLibres, @nClustersTotal )
> RETURN nSectoresPorCluster * nBytesPorSector * nClustersLibres
> ENDIF
>
> RETURN 0
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>
>
José Ramón Castro.
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Datos de la memoria y datos del disco

Mensaje por jrcpoli »

Jose F.
Debo estar haciendo algo mal, porque las cantidades que me dá la función
no se ajustan a la realidad, y además si a la función le sustituyo el tercer
parametro por el cuarto me dá un error como paramentro NIL.
Haber si alguno prueba y me dice si a él le da correcto o en realidad es
que hay algún error.
No tengo prisa porque no es una cosa prioritaría del programa.
José Ramón Castro Polinio.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=44c63c15@news.xailer.com...]44c63c15@news.xailer.com...[/email]
> José Ramón,
>
>> Dos cosas primero en mi ignorancia creo que falta lpRootPathName en la
>> implementación, dime si es correcto lo que digo o estoy equivocado.
>
> No, no falta. Es el parámetro hb_parc( 1 )
>
>
>> Segundo te preguntaba el mi anterior cuestión, ¿Como realizaba
>> posteriormente la llamada desde Xailer?
>
> FUNCTION EspacioLibreEnC()
>
> LOCAL nSectoresPorCluster, nBytesPorSector, nClustersLibres,
> nClustersTotal
>
> IF GetDiskFreeSpace( "C:", @nSectoresPorCluster, @nBytesPorSector,
> @nClustersLibres, @nClustersTotal )
> RETURN nSectoresPorCluster * nBytesPorSector * nClustersLibres
> ENDIF
>
> RETURN 0
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>
>
José Ramón Castro.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Datos de la memoria y datos del disco

Mensaje por jfgimenez »

José Ramón,
> Debo estar haciendo algo mal, porque las cantidades que me dá la
> función
> no se ajustan a la realidad, y además si a la función le sustituyo el
> tercer
> parametro por el cuarto me dá un error como paramentro NIL.
Tienes razón, hay un error en el retorno de parámetros. Cambia:
hb_stornl( lpSectorsPerCluster, 1 );
hb_stornl( lpBytesPerSector, 2 );
hb_stornl( lpNumberOfFreeClusters, 3 );
hb_stornl( lpTotalNumberOfClusters, 4 );
por:
hb_stornl( lpSectorsPerCluster, 2 );
hb_stornl( lpBytesPerSector, 3 );
hb_stornl( lpNumberOfFreeClusters, 4 );
hb_stornl( lpTotalNumberOfClusters, 5 );
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Datos de la memoria y datos del disco

Mensaje por jrcpoli »

Jose F.
Ahora perfecto muchas gracias.
José Ramón Castro Polinio.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:44c8a2d7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Ramón,
>
>> Debo estar haciendo algo mal, porque las cantidades que me dá la
>> función
>> no se ajustan a la realidad, y además si a la función le sustituyo el
>> tercer
>> parametro por el cuarto me dá un error como paramentro NIL.
>
> Tienes razón, hay un error en el retorno de parámetros. Cambia:
>
> hb_stornl( lpSectorsPerCluster, 1 );
> hb_stornl( lpBytesPerSector, 2 );
> hb_stornl( lpNumberOfFreeClusters, 3 );
> hb_stornl( lpTotalNumberOfClusters, 4 );
>
> por:
>
> hb_stornl( lpSectorsPerCluster, 2 );
> hb_stornl( lpBytesPerSector, 3 );
> hb_stornl( lpNumberOfFreeClusters, 4 );
> hb_stornl( lpTotalNumberOfClusters, 5 );
>
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>
José Ramón Castro.
Responder