C/Visual C - Ejecución continua

 
Vista:
sin imagen de perfil

Ejecución continua

Publicado por Edgar Muñoz (14 intervenciones) el 11/07/2006 20:51:29
Estoy realizando una aplicación en Visual C++ con MFC. Hasta lo que he visto, Visual C++ funciona con eventos. ¿Hay alguna forma de realizar una tarea de forma continua?.

Agradezco de antemano la ayuda que me brinden
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ejecución continua

Publicado por fernando.gomez (1603 intervenciones) el 11/07/2006 22:45:29
No sé a qué te refieras con "eventos", ese concepto no existe en C++. Lo más parecido a "eventos" de otros lenguajes como C#, son los callbacks. ¿A eso te refieres?

Ahora, tradicionalmente la gente tiende a confundir (de forma errónea, molesta y frustrante, al menos para mí) Visual C++ con un lenguaje de programación, así que haré la pregunta: ¿te refieres a que la programación _en_ Windows, con el API de Windows, funciona con mensajes que el sistema operativo envía a las diferentes ventanas de acuerdo al evento? Entonces la respuesta sería sí.

Pero ojo, el hecho de que se empleen mensajes no quiere decir que sólo pasa algo cuando se envía uno de éstos, y que en el inter no pasa algo. Efectívamente sí pasan cosas, y muchas. Lo que pasa es que todo eso se ejecuta dentro del kernel del sistema operativo, y sólo cuando se produce un mensaje, la función del "loop" regresa -hace un return- y entonces continúa nuestro programa. Otra cosa por la que da ese efecto es que Windows de entrada maneja por defecto los mensajes que no nos interesan.

Así, como podrás ver, la programación con el API de Windows se realiza de una forma contínua, para usar tus palabras. Ahora, si lo que quieres es no meterte en eso del "loop" de los mensajes de la ventana... pues simplemente no crees ventana alguna. Si aún así tienes que manejar una ventana, pues deberías considerar la creación de un hilo, al cuál no le asocias ventana alguna y por ende, sería "de forma contínua" su proceder.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ejecución continua

Publicado por Edgar Muñoz (14 intervenciones) el 11/07/2006 23:16:19
Disculpa por no utilizar las palabras adecuadas para describirte mi problema, pero no estoy muy familiarizado con las acepciones utilizadas en Visual C++.

Lo que trato de hacer es una tarea que se realice constantemente, como si estuviera dentro de un while infinito, pero que no afecte al funcionamiento general de la aplicación (o que al menos el efecto colateral sea mínimo).

Mi problema radica en que no encuentro lugar del código fuente debo programar esta tarea. En tu explicación me hablas de hilos (supongo que son los threads) pero no sé utilizarlos en Visual C++.

Te agradecería mucho si me das una mano con eso, y si no es mucha molestia envíame algo de código fuente a mi e-mail para tener algo en que guiarme.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ejecución continua

Publicado por fernando.gomez (1603 intervenciones) el 12/07/2006 00:20:50
Sí, probablemente tengas que hacer un hilo -thread. En esta URL encontrarás millones de información sobre threads:

http://www.codeproject.com/info/search.asp?cats=2&cats=3&searchkw=thread&Submit1=Search&author=&sd=15+Nov+1999&ed=11+Jul+2006

La forma sencilla sería mandar llamar a la función CreateThread, donde le pasas varios parámetros, entre los que se incluyen un puntero a una función que se ejecutará en el hilo.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/createthread.asp

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ejecución continua

Publicado por Nelek (816 intervenciones) el 12/07/2006 10:17:08
No se hasta que punto podra ser de complicado lo que quieres realizar... pero una manera bastante sencilla de lograr una cosa en un "bucle infinito" que no afecte demasiado al funcionamiento de lo demas es la utilizacion de un timer.

Puedes usar el timer con un tiempo a tu gusto, cuando el timer manda el mensaje de fin de cuenta, se realiza lo que se tenga que realizar y mientras el timer espera no se afecta al funcionamiento de lo demas (al menos no excesivamente).

Seguramente no sea lo mas optimo, pero al menos es la mas sencilla. Ahora, todo depende de que necesites hacer y de cuanto quieres que se repita, del tiempo entre ejecucion y ejecucion...

Con un while (1) conseguirias que se ejecutaran las cosas una y otra vez automaticamente sin pausa entre medias, pero tendrias problemas a la hora de controlar otras cosas. Con los ordenadores de hoy en dia yo creo que un tiempo de 5 milisegundos para el disparo del timer es un valor que permite seguir trabajando desahogado, y 400 repeticiones por segundo... ya es un buen valor, al menos eso creo.

Yo personalmente en lugar de meterme a ver como se maneja el DDX en forma manual para hacer que una ventana se actualice cada vez que se modifica algo en otra ventana, creo que me pondre una variable que cumpla la funcion del CDocument::IsModified en la ventana que tengo que chequear, y a la que ire testeando con un timer, y en caso de que haya modificaciones entonces acutlizar la otra ventana. A fin de cuentas lo que el ordenador necesita para procesar la informacion que se ha de actualizar no va a ser demasiado, dejando un tiempo redondeando por arriba para estar seguros, no deberia ser casi perceptible para el ojo humano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ejecución continua

Publicado por Edgar Muñoz (14 intervenciones) el 13/07/2006 01:13:09
Gracias por tu consejo Nelek, pero ya intenté utilizando el timer y los resultados no son los que yo esperaba
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ejecución continua

Publicado por Edgar Muñoz (14 intervenciones) el 13/07/2006 01:18:04
Gracias por tu ayuda amigo

Voy a revisar el link, si tengo algún problema te escribo a tu e-mail, espero que no sea una molestia.

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ejecución continua

Publicado por Nelek (816 intervenciones) el 18/07/2006 12:08:19
Si te refieres al mio... no es el verdadero, el mio es [email protected]

Y no, no sería molestia, pero no soy ningún profesional, así que no esperes demasiado, no sea que te desilusiones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar