Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2013
Novatin Novatin is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 61
Poder: 12
Novatin Va por buen camino
Smile Alternativa a ProcessMessages

Hola Amigos,

Acá voy luchando con un nuevo problema...

Tengo el siguiente código en un click text button:

Código:
int j;
for (int i=1;i<=27000;i++)
{
    j = CaptaSeñal();
    Edit1->Text= i;
}
Les explico: sucede que estoy tratando de contar las revoluciones por minuto de un Motor, para ello tengo la funcion CaptaSeñal me captura un ciclo del motor por puerto paralelo, y la idea es que por cada ciclo captado en un Edit1 quiero ir contando y mostranto las veces que se capta la señal, sin embargo acá tengo un pequeño gran inconveniente... al llegar a este bloque For se me congela el programa sin mostrar nada en el Edit1 hasta que termina de captar las 27000 veces... y al incluirle la instrucción Application->ProcessMessages() luego de Edit1->Text ya no me hace un conteo correcto... supongo que sucede por que voy haciendo otras cosas en la misma pc(como abrir un documento, cargar otro programa,etc) pero lo que busco es justamente eso: dejar al algoritmo contando entretanto yo voy haciendo otras cosas en la misma pc...

¿Es posible hacer esto? Es por ello que recurro a Uds, si pudieran darme algun consejo al respecto del uso de Application->ProcessMessages, o talves otra opción que uds conozcan...

De antemano muchas gracias.

Un Saludo.
Responder Con Cita
  #2  
Antiguo 23-01-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Mientras desconozco sobre C++ y librerias en esa plataforma, existen 2 soluciones universales para operar en estos casos.

Aunque existan "trucos" para hacer parecer que la app funciona bien, siempre terminas encontrando un cuello de botella (excepto en los casos triviales) ya que la mayoria del codigo es sincronico y "bloquea" por defecto por cada llamada.

La primera, es usar un hilo "de fondo" que va enviando los resultados a la GUI. Hay muchos ejemplos de uso de hilos, y para casos simples es una opcion viable. PERO, si requieres un manejo ligeramente complicado puede resultar dificil (y el problema de los hilos es que no es obvio ni predecible que muro te encontraras).

La segunda, es operar de forma asincronica.

Junto a una cola (http://es.wikipedia.org/wiki/Cola_(inform%C3%A1tica)) con un procesador de colas.

Una liberia con la que experimente alguna vez y permite operar un procesador de colas embeido es http://www.zeromq.org/intro:read-the-manual.

Lo elegante de esta via, es que un procesador de colas es una pieza de software muy eficiente en manejar cantidades grandes de mensajes, operar en ellos y de una forma mas intuitiva que el manejo de hilos (los procesadores de colas pueden o no manejar internamente esos hilos).

Mira la guia de 0mq, en especial el metodo de PUB-SUB (Publica-Suscribe)


http://zguide.zeromq.org/cpp:wuclient

P.D: Windows tiene un sistema masomenos parecido usando "windows messages" http://www.delphitricks.com/source-c...ndmessage.html, que puede resulte aun mas facil que hilos. Pero si piensas manejar mucho este caso de uso y realmente necesitas poder aguantar cuanta cantidad de datos te puedas imaginar, 0mq es una mucho mejor opcion (los mensajes de windows estan hechos para comunicar eventos en la GUI, ppalmente).
__________________
El malabarista.

Última edición por mamcx fecha: 23-01-2013 a las 04:04:47.
Responder Con Cita
  #3  
Antiguo 25-01-2013
Novatin Novatin is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 61
Poder: 12
Novatin Va por buen camino
Gracias por la respuesta...

Sabia que tarde o temprano tendría que entrarle a los hilos... pero no tan temprano... (voy por mi segundo proyecto relativamente grande en builder)

Y ahora que lo veo "0mq" -vaya nombrecito, por poco y pense que era un "error de dedo" - tambien me parece buena opción, antes de los temibles "hilos"... lo probare y les cuento como me fue. De todos modos si hubiera otra opción acá soy todo ojitos (pa leerlos)..


un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con Application.ProcessMessages jandro Varios 5 21-01-2010 15:36:14
Application.ProcessMessages; Stevenmn API de Windows 3 24-02-2008 19:02:34
Tthread Vs. Application -> ProcessMessages(); Peterman Varios 8 31-05-2007 03:05:03
Problema con Application.ProcessMessages Coco API de Windows 0 25-02-2005 15:28:44
No funciona Application.ProcessMessages Sr_Sombrero Varios 0 24-01-2005 22:21:01


La franja horaria es GMT +2. Ahora son las 15:28:15.


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
Copyright 1996-2007 Club Delphi