2011-08-23 16 views
14

Estoy desarrollando una aplicación basada en MFC Dialog en Visual Studio 2008. ¿Quiero usar el temporizador que se inicia al inicio de la aplicación y continúa ejecutándose y llama a una función que realiza mi tarea? ¿Cómo puedo hacer esto?Cómo utilizar el temporizador en la aplicación basada en el cuadro de diálogo MFC?

Gracias

+0

http://msdn.microsoft.com/en-us/library/49313fdf(v=vs.80).aspx – YeenFei

+0

Recibo este error: error C3867: 'CHDVRLauncherDlg :: TimerFunction': llamada de función falta argumento lista; use '& CHDVRLauncherDlg :: TimerFunction' para crear un puntero al miembro. si declaro la función de devolución de llamada como estática, no puedo llamar a mi otra función desde esta devolución de llamada. Soy nuevo en MFC. Gracias –

+0

Otras formas que debe considerar son: obtener la hora actual de vez en cuando, y verificar si transcurrió suficiente tiempo, o iniciar una nueva secuencia (o proceso) que llamará 'sleep (milisegundos largos);', y luego llamar cualquiera que sea la función que desee. –

Respuesta

18

sólo tiene que utilizar SetTimer método, y pasan dos argumentos: ID Timer (cualquier número), y el tiempo de espera en milisegundos. A continuación, escriba OnTimer implementación y una entrada ON_WM_TIMER dentro de BEGIN_MESSAGE_MAP...END_MESSAGE_MAP.

CWnd::SetTimer toma 3 parámetros, pero solo se requieren 2. Pase el tercer argumento como NULL.

CWnd::OnTimer

1

Si desea obtener la idea básica del uso de temporizadores, la amabilidad de echar un vistazo a este enlace y pasar por el procedimiento paso a paso sobre cómo trabajar con temporizadores. Después de esto, podrá usar temporizadores fácilmente en su aplicación cuando lo desee.

Enlace: http://www.functionx.com/visualc/controls/timer.htm

Espero que esto ayude.

Saludos.

1
_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, 
    void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)) 

Es posible que desee hacer algo como

UINT_PTR myTimer = SetTimer (1, 1000, null); // one event every 1000 ms = 1 s 

y reaccionar al evento ON_TIMER de controlador de eventos de su ventana:

void CMyView::OnTimer (UINT_PTR nIdEvent) 
{ 
if (nIdEvent == 1) 
    // handle timer event 
} 

alternativa, se puede pasar un puntero a una manipulación de la función los eventos del temporizador Mantener el control del temporizador le permite apagarlo usando KillTimer() en caso de que tenga que hacerlo.

Cuestiones relacionadas