[ nbeograd @ 30.10.2004. 03:20 ] @
Kako da u Visual C++ (6 ili .NET) pozovem funkciju na svakih 300 mikrosekundi (intervali za WM_Timer poruke su u milisekundama)? Hvala |
[ nbeograd @ 30.10.2004. 03:20 ] @
[ Milan Aksic @ 31.10.2004. 21:43 ] @
Koriscenjem Win32 API funkcija, "tajmer" se startuje pozivom SetTimer() funkcije (npr. tokom obrade poruke WM_CREATE), i dodavanjem case uslova za obradu WM_TIMER poruke u switch (ili else if) uslovnoj petlji za obradu poruka. Na primer:
Code: switch (message) { case WM_CREATE: SetTimer(hwnd, 1, 1000, NULL); /* ostali kood */ return 0; case WM_TIMER: /* kood koji bi se izvrsavao nakon dobijanja WM_TIMER poruke */ return 0; /* ostali uslovi */ } Koricenjem MFC biblioteke, "tajmer" se startuje pozivom preklopljene funkcije istog naziva SetTimer(), naznacavanjem obrade WM_TIMER deklarisuci poziv afx_msg void OnTimer(UINT nIDEvent) u deklaraciji "Frame" (izvedene iz CFrameWnd) klase i naznacavanje imena poruke u implementaciji iste klase. Na primer: Code: // cglavnifrejm.h class CGlavniFrejm : public CFrameWnd { public: CGlavniFrejm(); ~CGlavniFrejm(); // ostali kood private: //{{AFX_MSG(CGlavniFrejm) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnTimer(UINT nIDEvent); //}}AFX_MSG DECLARE_MESSAGE_MAP() // ostali kood } // cglavnifrejm.cpp #include "cglavnifrejm.h" BEGIN_MESSAGE_MAP(CGlavniFrejm, CFrameWnd) //{{AFX_MSG_MAP(CGlavniFrejm) ON_WM_CREATE() ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() // implementacija kostruktora CGlavniFrejm klase // implementacije destruktora CGlavniFrejm klase int CGlavniFrejm::OnCreate(LPCREATESTRUCT lpCreateStruct) { SetTimer(1, 100, NULL); // ostali kood return 0; } void CGlavniFrejm::OnTimer(UINT nIDEvent) { // kood koji bi se izvrsavao nakon dobijanja WM_TIMER poruke } // ostali kood U oba gornja primera, kood za obradu poruke WM_TIMER ce se verovatno (u zavisnosti od samog kooda) izvrsavati svake sekunde (1 sek. == 1000 ms). Takodje, najkraci vremenski interval slanja WM_TIMER poruke, ako se dobro secam, ne moze biti kraci od 50 ms na Win9x odnosno 15 ms na WinNT verzijama. [ `and @ 01.11.2004. 12:32 ] @
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|