Aplicaciones en tiempo real?

17/12/2004 - 13:01 por Mario | Informe spam
Hola,

Tenemos una aplicación que funciona bajo C# en un portatil la cual tiene una
dll que intercambia información via TCP (socket puro) con un dispositivo.
Hemos realizado una apliación de prueba para hacer lo mismo desde un pocket
pc.
El primer problema que tengo para convertir mi dll es que los
System.Timers.Timer no valen en el compact framework, así que estoy
utilizando System.Threading.Timers.

Dicha DLL en el Pocket PC no realiza el intercambio de datos (polling) entre
el dispositivos a la velocidad deseada (alrededor de 100ms cada trama de
información) sino que lo hace en un tiempo variable entre 100ms y 1s.
También notar que deja el Pocket PC medio colgado (como si estuviese
consumiendo muchos recursos).
Si ésta dll (con los cambios realizados), la ejecuto con la aplicación que
ya habiamos desarrollado en el portatil funciona perfectamente.

Mi duda es:
El pocket PC no tiene como funcionalidad para aplicaciones en tiempo real?
Los system.threading.timers puede ser que sean tan inprecisos?

PD: Utilizo un iPAQ h5500

Un saludo.

Preguntas similare

Leer las respuestas

#1 José Miguel Torres
17/12/2004 - 13:09 | Informe spam
Yo no me atrveria a decir que son imprecisos los (system.threading.timers )
sino que el propio Pocket lo es. Es decir que dependiendo delprocesador,
fabricante y S.O. (WinCE o PPC) he notado velocidades de acceso a internet y
de acceso a datos de lo más dispar, sin ninguna explicación digamos...
'concluyente', detodas formas creo que con WinCE obtendrás un mayor
rendimiento así como optimizando el código de tu aplicación, espero te haya
servido de algo.saludos


José Miguel Torres
jtorres_diaz~~ARROBA~~terra.es
http://jmtorres.blogspot.com


"Mario" <mcampo#nospam#@proytecsa.es> escribió en el mensaje
news:#$
Hola,

Tenemos una aplicación que funciona bajo C# en un portatil la cual tiene


una
dll que intercambia información via TCP (socket puro) con un dispositivo.
Hemos realizado una apliación de prueba para hacer lo mismo desde un


pocket
pc.
El primer problema que tengo para convertir mi dll es que los
System.Timers.Timer no valen en el compact framework, así que estoy
utilizando System.Threading.Timers.

Dicha DLL en el Pocket PC no realiza el intercambio de datos (polling)


entre
el dispositivos a la velocidad deseada (alrededor de 100ms cada trama de
información) sino que lo hace en un tiempo variable entre 100ms y 1s.
También notar que deja el Pocket PC medio colgado (como si estuviese
consumiendo muchos recursos).
Si ésta dll (con los cambios realizados), la ejecuto con la aplicación que
ya habiamos desarrollado en el portatil funciona perfectamente.

Mi duda es:
El pocket PC no tiene como funcionalidad para aplicaciones en tiempo real?
Los system.threading.timers puede ser que sean tan inprecisos?

PD: Utilizo un iPAQ h5500

Un saludo.


Respuesta Responder a este mensaje
#2 Zephryn Xirdal
17/12/2004 - 21:56 | Informe spam
Hola.

Supongo que no estás mirando en el sitio correcto. Teniendo en cuenta que el
Pocket PC tiene un Media Player, que necesita unos tiempos muy precisos, se
podrían obtener de alguna manera del mismo (tal y como lo hace el Media
Player). La cuestión es encontrarlo.

Es muy posible que próximamente yo también tenga que hacer algo parecido,
pero el proyecto todavía está en fase de "pre-pre-pre evaluación
interjefes", así que también me interesa el tema.

En windows se pueden obtener timers relativamente precisos con los timers
multimedia, que ahora no recuerdo cómo se utlizaban, así que supongo que el
API del PDA también los tenga... Quizás por ahí encuentres algo.



"Mario" <mcampo#nospam#@proytecsa.es> escribió en el mensaje
news:%23$
Hola,

Tenemos una aplicación que funciona bajo C# en un portatil la cual tiene
una dll que intercambia información via TCP (socket puro) con un
dispositivo.
Hemos realizado una apliación de prueba para hacer lo mismo desde un
pocket pc.
El primer problema que tengo para convertir mi dll es que los
System.Timers.Timer no valen en el compact framework, así que estoy
utilizando System.Threading.Timers.

Dicha DLL en el Pocket PC no realiza el intercambio de datos (polling)
entre el dispositivos a la velocidad deseada (alrededor de 100ms cada
trama de información) sino que lo hace en un tiempo variable entre 100ms y
1s.
También notar que deja el Pocket PC medio colgado (como si estuviese
consumiendo muchos recursos).
Si ésta dll (con los cambios realizados), la ejecuto con la aplicación que
ya habiamos desarrollado en el portatil funciona perfectamente.

Mi duda es:
El pocket PC no tiene como funcionalidad para aplicaciones en tiempo real?
Los system.threading.timers puede ser que sean tan inprecisos?

PD: Utilizo un iPAQ h5500

Un saludo.

Respuesta Responder a este mensaje
#3 Alejandro Mezcua
21/12/2004 - 17:48 | Informe spam
Hola, Mario.

Ningún SO de Microsoft está diseñado para hacer aplicaciones de tiempo real.
El sistema utiliza 'preemptive multitasking' para asignar tiempo de
procesador a las distintas tareas en ejecución. Cada tarea, si todas se
ejecutan con la misma prioridad, se irán repartiendo el tiempo de procesador
idealmente por igual.

Cuanto más rápido sea el procesador (un PC con PIV por ejemplo) más da la
sensación de que parece que trabaja en tiempo real, pero no lo es.

Como el procesador y resto de recursos de un Pocket PC son mucho más
limitados que en un PC, la misma aplicación desde luego no se va a ejecutar
igual en un hardware que en otro.

Lo que deberías hacer es determinar dónde se están gastando más recursos en
tu aplicación y optimizar la ejecución de la aplicación hasta que funcione
en unos parámetros que consideres aceptables.

Viendo un poco la aplicación que estás haciendo, quizá ganes aprovechando
las capacidades de multitarea que te ofrece el Compact Framework. Mira el
uso de la clase ThreadPool.

También ten cuidado con el uso de Strings, que, dependiendo del caso, pueden
resultar lentos.

Habría que mirar la aplicación en detalle para ver por dónde ganar tiempo.

Un saludo,

Alejandro Mezcua
MVP .NET Compact Framework
http://www.byteabyte.net/

"Mario" <mcampo#nospam#@proytecsa.es> wrote in message
news:#$
Hola,

Tenemos una aplicación que funciona bajo C# en un portatil la cual tiene


una
dll que intercambia información via TCP (socket puro) con un dispositivo.
Hemos realizado una apliación de prueba para hacer lo mismo desde un


pocket
pc.
El primer problema que tengo para convertir mi dll es que los
System.Timers.Timer no valen en el compact framework, así que estoy
utilizando System.Threading.Timers.

Dicha DLL en el Pocket PC no realiza el intercambio de datos (polling)


entre
el dispositivos a la velocidad deseada (alrededor de 100ms cada trama de
información) sino que lo hace en un tiempo variable entre 100ms y 1s.
También notar que deja el Pocket PC medio colgado (como si estuviese
consumiendo muchos recursos).
Si ésta dll (con los cambios realizados), la ejecuto con la aplicación que
ya habiamos desarrollado en el portatil funciona perfectamente.

Mi duda es:
El pocket PC no tiene como funcionalidad para aplicaciones en tiempo real?
Los system.threading.timers puede ser que sean tan inprecisos?

PD: Utilizo un iPAQ h5500

Un saludo.


Respuesta Responder a este mensaje
#4 molotess
12/01/2005 - 19:03 | Informe spam
Bonita respuesta, de hecho el Round Robin es lo más parecido a tiempo real en
un único procesador. De todas formas tambien si te interesa puedes usar el
metodo QueryPerformanceCounter, que creo sigue el API, para ver temas de
frecuencias de la máquina y Timers..


"Alejandro Mezcua" wrote:

Hola, Mario.

Ningún SO de Microsoft está diseñado para hacer aplicaciones de tiempo real.
El sistema utiliza 'preemptive multitasking' para asignar tiempo de
procesador a las distintas tareas en ejecución. Cada tarea, si todas se
ejecutan con la misma prioridad, se irán repartiendo el tiempo de procesador
idealmente por igual.

Cuanto más rápido sea el procesador (un PC con PIV por ejemplo) más da la
sensación de que parece que trabaja en tiempo real, pero no lo es.

Como el procesador y resto de recursos de un Pocket PC son mucho más
limitados que en un PC, la misma aplicación desde luego no se va a ejecutar
igual en un hardware que en otro.

Lo que deberías hacer es determinar dónde se están gastando más recursos en
tu aplicación y optimizar la ejecución de la aplicación hasta que funcione
en unos parámetros que consideres aceptables.

Viendo un poco la aplicación que estás haciendo, quizá ganes aprovechando
las capacidades de multitarea que te ofrece el Compact Framework. Mira el
uso de la clase ThreadPool.

También ten cuidado con el uso de Strings, que, dependiendo del caso, pueden
resultar lentos.

Habría que mirar la aplicación en detalle para ver por dónde ganar tiempo.

Un saludo,

Alejandro Mezcua
MVP .NET Compact Framework
http://www.byteabyte.net/

"Mario" <mcampo#nospam#@proytecsa.es> wrote in message
news:#$
> Hola,
>
> Tenemos una aplicación que funciona bajo C# en un portatil la cual tiene
una
> dll que intercambia información via TCP (socket puro) con un dispositivo.
> Hemos realizado una apliación de prueba para hacer lo mismo desde un
pocket
> pc.
> El primer problema que tengo para convertir mi dll es que los
> System.Timers.Timer no valen en el compact framework, así que estoy
> utilizando System.Threading.Timers.
>
> Dicha DLL en el Pocket PC no realiza el intercambio de datos (polling)
entre
> el dispositivos a la velocidad deseada (alrededor de 100ms cada trama de
> información) sino que lo hace en un tiempo variable entre 100ms y 1s.
> También notar que deja el Pocket PC medio colgado (como si estuviese
> consumiendo muchos recursos).
> Si ésta dll (con los cambios realizados), la ejecuto con la aplicación que
> ya habiamos desarrollado en el portatil funciona perfectamente.
>
> Mi duda es:
> El pocket PC no tiene como funcionalidad para aplicaciones en tiempo real?
> Los system.threading.timers puede ser que sean tan inprecisos?
>
> PD: Utilizo un iPAQ h5500
>
> Un saludo.
>
>



Respuesta Responder a este mensaje
#5 adolfo troncoso
28/01/2005 - 01:59 | Informe spam
SI QUIRES TE LA MANDO
ES MI CORREO

"Mario" <mcampo#nospam#@proytecsa.es> escribió en el mensaje
news:#$
Hola,

Tenemos una aplicación que funciona bajo C# en un portatil la cual tiene


una
dll que intercambia información via TCP (socket puro) con un dispositivo.
Hemos realizado una apliación de prueba para hacer lo mismo desde un


pocket
pc.
El primer problema que tengo para convertir mi dll es que los
System.Timers.Timer no valen en el compact framework, así que estoy
utilizando System.Threading.Timers.

Dicha DLL en el Pocket PC no realiza el intercambio de datos (polling)


entre
el dispositivos a la velocidad deseada (alrededor de 100ms cada trama de
información) sino que lo hace en un tiempo variable entre 100ms y 1s.
También notar que deja el Pocket PC medio colgado (como si estuviese
consumiendo muchos recursos).
Si ésta dll (con los cambios realizados), la ejecuto con la aplicación que
ya habiamos desarrollado en el portatil funciona perfectamente.

Mi duda es:
El pocket PC no tiene como funcionalidad para aplicaciones en tiempo real?
Los system.threading.timers puede ser que sean tan inprecisos?

PD: Utilizo un iPAQ h5500

Un saludo.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida