2011-08-23 18 views
14

Visual Studio 2008'de MFC Dialog tabanlı uygulama geliştiriyorum. Uygulamanın başlamasına başladığım zamanlayıcıyı kullanmak istiyorum ve çalışmaya devam edip görevimi yerine getiren bir işlevi çağırmaya devam ediyorum. Bunu nasıl yapabilirim?MFC Dialog tabanlı Uygulamada Zamanlayıcı Nasıl Kullanılır?

Teşekkür

+0

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

+0

Bu hatayı alıyorum: Hata C3867: 'CHDVRLauncherDlg :: TimerFunction': işlev çağrısı eksik argümanı liste; üyeye bir işaretçi oluşturmak için '& CHDVRLauncherDlg :: TimerFunction' komutunu kullanın. Geri arama işlevini statik olarak bildirirseniz, bu geri bildirimin diğer işlevimi arayamıyorum. MFC'ye yeniyim. Teşekkürler –

+0

Gözönünde bulundurmanız gereken diğer yollar şunlardır: her seferinde geçerli zamanı alma ve yeterli zaman geçip geçmediğini kontrol etme, veya "uyku (uzun öğütücüler)" diyen yeni bir iş parçacığı (veya işlem) başlatma; İstediğiniz işlev hangisi. –

cevap

18

Sadece SetTimer yöntemini kullanın ve iki argüman pass: Zamanlayıcı ID (herhangi bir sayı) ve milisaniye cinsinden zaman aşımı. Ardından, OnTimer uygulamasını ve 'un içine bir giriş ON_WM_TIMER yazın.

CWnd::SetTimer 3 parametre alır, ancak yalnızca 2 gerekir. Üçüncü bağımsız değişkeni NULL olarak geçir. Eğer Timers'ı kullanmanın temel fikir edinmek istiyorsanız

CWnd::OnTimer

1

, lütfen bu bağlantıyı bir göz ve zamanlayıcılar çalışma hakkında adım prosedürü adım geçer. Bundan sonra, istediğiniz zaman uygulamanızda zamanlayıcıları kolayca kullanabilmeniz gerekir.

Bağlantı: Bu yardımcı olur http://www.functionx.com/visualc/controls/timer.htm

Umut.

Şerefe.

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

Alternatif bir işlev taşıma için bir işaretçi iletebilirsiniz:

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

Sen

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

böyle bir şey yapmak ve pencerenin olay işleyicisi içinde ON_TIMER olaya tepki isteyebilirsiniz Zamanlayıcı olaylar. Tutamacın zamanlayıcının tutulması durumunda, bunu yapmanız durumunda KillTimer() kullanarak kapatmanız mümkündür.

İlgili konular