Ver Mensaje Individual
  #7 (permalink)  
Antiguo 23/01/2015, 00:07
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Mantener el programa siempre en ejecucion

Hola,

Aunque no estoy actualizado sobre el tema, posiblemente te sea de alguna ayuda.

Cita:
Iniciado por shekel Ver Mensaje
Estoy intentando mantener mi programa en c++ siempre en ejecucion. ...
Hay una gran diferencia entre mantener un programa en ejecución esperando a algún evento del sistema a mantener un programa ejecutando una acción repetitivamente.

Cita:
Iniciado por shekel Ver Mensaje
...Se trata de listar los medios conectados a la espera de encontrar que he conectado mi telefono movil..

Puedo hacer que funcione si cuanto inicio el programa ya esta el movil conectado, mi pregunta es.. ¿Cual es la forma mas eficaz para mantener mi programa siempre en ejecucion?

Estoy usando Windows 7.

He probado a usar "while (true)" pero cuando voy al administrador de tareas en la columna CPU me aparece como 99% de uso... creo que estoy haciendolo mal
Definitivamente la mejor opción es esperar a que el sistema operativo te avise cuando haya sucedido un evento. Usar un ciclo infinito no es buena idea en cualquier caso. Aclarando de una mejor forma, usar un ciclo infinito con while(ture) no es buena idea en cualquier caso, usar un ciclo infinito que espere a recibir un mensaje es lo mas adecuado.

Dependiendo del tipo de evento que deseas tendrías que buscar la librería que mejor se ajuste a tus necesidades. Por ejemplo, si solamente quieres saber si se ha montado un volumen, con la ventaja que lo puedes obtener en el GetMessage de tu aplicación puesto que es un WM_, o cuando se carga una nueva unidad de disco:

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

O si quieres que te avise cuando se ha conectado un nuevo dispositivo:

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

Que son dos cosas muy diferentes, el primero te avisa de unidades y puntos de montaje, mientras el segundo te avisa de dispositivos, como por ejemplo cuando configuras Android con el protocolo MTP.

Cita:
Iniciado por razpeitia Ver Mensaje
Internamente el sistema operativo, siempre esta checando (con un ciclo infino) por evento esto se llama event loop.
Solamente como aclaración adicional, hay que tener en cuenta que no es exactamente lo mismo, el Event Loop de Windows no es un simple ciclo infinito. Sino todas las aplicaciones de Windows consumirían el 100% del procesador todo el tiempo. Con la instrucción :

while (GetMessage(&msg, NULL, 0, 0)) { ... }

Lo que hace el sistema operativo es "esperar a recibir un mensaje" .. GetMessage() .. eso permite que el sistema le de un time slice a cada aplicación y el SO no se quede bloqueado. Lo que permite que la aplicación no haga absolutamente nada durante algunos momentos, mientras espera el GetMessage, es decir, puede estar sin consumir recursos del sistema mientras espera que se conecte el teléfono.

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

Cita:
Iniciado por lareto Ver Mensaje
while(true) (o equivalentes) es lo normal, ...
No sé específicamente a que te refieres con while(true) .. pero desde mi punto de vista es lo peor que puedes hacer en una aplicación, en el lenguaje que sea, para hacer lo que sea, a menos que haya un break o un salto de control por otro medio, y no se quede bloqueado todo el sistema.

Técnicamente son dos tecnologías diferentes, el pull y el push. Por ejemplo, estar chequeando cada 5 segundos si hay datos es un pésimo comportamiento (pull). Mientras que esperar hasta recibir un mensaje con GetMessage es mas adecuando (push).

Saludos,

Última edición por HackmanC; 23/01/2015 a las 00:51 Razón: aclaraciones