Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[WinApi]SetTimer

#1
Ściana  [WinApi]SetTimer
Otóż mam funkcje settimer:
Kod:
SetTimer(NULL,100,60000,funkcja(/*parametr1*/, /*parametr2*/));
...
//Poźniej sie w tej funkcji stawiam nastepny timer
KillTimer(NULL,100);
SetTimer(NULL,100,60000,funkcja(/*parametr1*/, /*parametr2*/));
I funkcja() wykonuje się kilkanasie razy na sekunde mimo iż w parametrach podaje żeby to było 60000 ms czyli 1 minuta...
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#2
RE: [WinApi]SetTimer
Przepraszam - jaki chcesz efekt osiągnąć? Po odliczeniu 60sekund do okna rodzica jest wysyłany komunikat WM_TIMER, a parametr typu WPARAM zawiera ID timera.

Oto opis na MSDN

UINT_PTR SetTimer(
HWND hWnd,
UINT_PTR nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc
);

Parametr HWND - uchwyt do okna rodzica,
pierwszy parametr UINT - ID kontrolki,
drugi parametr UINT - czas do odliczenia, w milisekundach,
TIMERPROC - funkcja obsługująca wiadomość WM_TIMER, jeśli nie podasz - system wysyła wiadomość WM_TIMER do okna rodzica (patrz HWND).

Chcąc uzyskać efekt wywoływania funkcji co minutę, bez mieszania w oknie-rodzicu piszesz coś takiego...
Kod:
//przed main - deklaracja
LRESULT CALLBACK _TimerProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
//gdzieś w main
SetTimer( NULL, 100, 60 * 1000, _TimerProc );

//main się skończyło, funkcja _TimerProc - definicja

LRESULT CALLBACK _TimerProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg )
   {
       case WM_TIMER:
       {
            if ( wParam == 100 ) //id timera
                funkcja(/*parametr1*/, /*parametr2*/);

            break;
        }
   }
}

W powyższym kodzie zakładam, że funkcja _TimerProc ma realizować komunikaty tylko od timerów, jeśli byś chciał to wrzucić w obsługę okna-rodzica...

Kod:
SetTimer( uchwyt okna rodzica , 100, 60 * 1000, NULL );

//main się skończyło

//do funkcji obsługującej komunikaty okna-rodzica, między switch(msg) lub jak masz zapisane (najlepiej podaj kod, jeśli robisz aplikację okienkową)
case WM_TIMER:
       {
            if ( wParam == 100 ) //id timera
                funkcja(/*parametr1*/, /*parametr2*/);

            break;
        }

PS. może ci się przydać do eksperymentów... klasa Timer.
Pozdrawiam.
[Obrazek: 16359.png]
[Obrazek: 15712.jpg]
 System operacyjny: windows_vista Przeglądarka: firefox
#3
RE: [WinApi]SetTimer
Ostatni parametr to funkcja obsługująca komunikat WM_TIMER? Musiałem nie doczytać i myślałem, że funkcja tam wskazana zostanie wykonana... Dzięki za pomoc ;]
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
c+++winapi+settimersettimer winapiwinapi settimer

Podobne wątki ([WinApi]SetTimer)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [C++ WinAPI] Kompresja bitmapy kikiw 0 5431 25.12.2014, 16:15
Ostatni post: kikiw
  [c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER sfx 3 3785 12.08.2014, 16:11
Ostatni post: Darekg11
  winapi-taki sam tekst w kolejnych zakładkach sfx 0 3233 27.07.2014, 20:28
Ostatni post: sfx

Skocz do: