2011-08-23 34 views
14

Tôi đang phát triển ứng dụng dựa trên MFC Dialog trong Visual Studio 2008. Tôi muốn sử dụng bộ hẹn giờ bắt đầu khi bắt đầu ứng dụng và tiếp tục chạy và gọi một hàm thực hiện nhiệm vụ của mình? Tôi có thể làm cái này như thế nào?Làm thế nào để sử dụng bộ hẹn giờ trong ứng dụng dựa trên hộp thoại MFC?

Cảm ơn

+0

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

+0

Tôi nhận được lỗi này: lỗi C3867: 'CHDVRLauncherDlg :: TimerFunction': hàm gọi thiếu đối số danh sách; sử dụng '& CHDVRLauncherDlg :: TimerFunction' để tạo con trỏ cho thành viên. nếu tôi khai báo hàm gọi lại là tĩnh thì tôi không thể gọi hàm khác của tôi từ cuộc gọi lại này. Tôi mới đến MFC. Cảm ơn –

+0

Những cách khác bạn nên cân nhắc là: nhận thời gian hiện tại mỗi lần, và kiểm tra xem có đủ thời gian không, hoặc bắt đầu một luồng mới (hoặc quá trình) sẽ gọi là 'sleep (long millisecs);', và sau đó gọi tùy theo chức năng nào bạn muốn. –

Trả lời

18

Chỉ cần sử dụng SetTimer phương pháp, và vượt qua hai đối số: Timer ID (số bất kỳ), và thời gian chờ trong mili giây. Sau đó, viết lên thực hiện OnTimer và nhập ON_WM_TIMER bên trong BEGIN_MESSAGE_MAP...END_MESSAGE_MAP.

CWnd::SetTimer có 3 tham số, nhưng chỉ có 2 tham số. Vượt qua đối số thứ ba là NULL.

CWnd::OnTimer

1

Nếu bạn muốn nhận được ý tưởng cơ bản của việc sử dụng Timers, vui lòng có một cái nhìn tại liên kết này và đi qua từng bước thủ tục về làm việc với tính giờ. Sau này, bạn sẽ có thể sử dụng bộ đếm thời gian dễ dàng trong ứng dụng của bạn bất cứ khi nào bạn muốn.

Liên kết: http://www.functionx.com/visualc/controls/timer.htm

Hy vọng điều này sẽ hữu ích.

Chúc mừng.

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

Bạn có thể muốn làm điều gì đó như

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

và phản ứng với các sự kiện ON_TIMER trong xử lý sự kiện của cửa sổ của bạn:

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

Hoặc bạn có thể vượt qua một con trỏ đến một xử lý chức năng các sự kiện hẹn giờ. Giữ tay cầm cho bộ đếm thời gian cho phép bạn tắt nó bằng cách sử dụng KillTimer() trong trường hợp bạn phải.

Các vấn đề liên quan