Programación General > C/C++
Proceso siempre activo
(1/1)
Epa:
Buenas.
Aca aparezco con una nueva consulta, haber si alguien me puede dar una manito.
Hice un programa (de tipo ventana en windows) que tiene que realizar una tarea cada un determinado tiempo, pero resulta que el temporizador solo funciona si la ventana tiene el foco y no esta minimizada.
Alguien sabe como puedo hacer para que el proceso siga corriendo siempre?
Por si sirve de algo esta es mas o menos la forma en que funciona:
--- Código: C++ --- time_t ultimo; time(&ultimo); while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); if (count(&ultimo)) { SendMsg(chwnd, VK_F4); } } bool count(time_t *ultimo){ time_t actual; time(&actual); if( actual >= (*ultimo + 300)){ *ultimo = actual; return true; } return false; }
Se agradece.
Saludos
Eternal Idol:
¿Solo hace una cosa? ¿Necesita una ventana? Tal vez un bucle con un Sleep sea una solucion mucho mas simle e igual de efectiva (depende del problema, claro).
diego.martinez:
Comprueba primero, como dice Eternal Idol, si realmente necesitas una ventana para simplemente contar. Si sigues necesitandola entonces:
--- Cita de: "Epa" ---
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
if (count(&ultimo))
{
SendMsg(chwnd, VK_F4);
}
}
--- Fin de la cita ---
GetMessage bloquea el proceso hasta que hay un mensaje en la ventana.
Mejor usa:
--- Cita de: "Epa" ---
while (1)
{
while (PeekMessage (&messages, NULL, 0, 0,PM_REMOVE))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
if (count(&ultimo))
{
SendMsg(chwnd, VK_F4);
}
Sleep(1);
}
--- Fin de la cita ---
El PeekMessage retorna haya o no mensaje, y con el PM_REMOVE, emula el comportamiento del GetMessage.
Recuerda poner un Sleep(1) para evitar el consumo alto de cpu.
Otra cosa, para contar segundos, puedes usar la Api :
SetTimer
KillTimer
http://msdn.microsoft.com/en-us/library/ms644906(VS.85).aspx
suerte!
:hola:
Epa:
Muchas gracias por las respuestas, se soluciono con el peekmessage.
El codigo que puse es solo una partecira, que me parecia relevante al tema.
No se si es totalmente necesario que sea con ventanas, pero necesito que el usuario pueda iniciar y parar las tareas, y modificar ciertos aprametros sin que esto interfiera (demasiado) en la ejecucion de las tareas. Por lo que me parecio que iba a ser mas sencillo de esa manera.
gracias y saludos
Navegación
Ir a la versión completa