Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Timery winapi w aplikacji konsolowej

Ballbreaker 18 May 2010 21:45 1059 3
  • #1
    Ballbreaker
    Level 12  
    Witam !

    Czy można koszystać z timera w aplikacji konsolowej win32?

    Jeśli tak, to jak to zrobić?
    Zdefiniować sobie okno bez okna ?


    Generalnie chodzi o odbieranie eventów w pętli komunikatów, ale aplikacja ma chodzić z wiersza poleceń.


    Pozdrawiam
  • Helpful post
    #2
    serpent
    Level 12  
    Możesz sobie stworzyć ukryte okno, które będzie służyło tylko do odbierania komunikatów WM_TIMER.

    Chyba, że chcesz to zrobić bez okien.
    Wtedy tworzysz timer funkcją SetTimer, a następnie przechodzisz do pętli wiadomości:
    
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)==1)
      {
      if (msg.message==WM_TIMER)
        {
        // kod obsługi timera
        }
      }
    


    Nie daję gwarancji, ale powinno działać.
  • #3
    0DFh
    Level 11  
    Przykład w Assemblerze MASM32, ale to WinAPI, więc powinieneś dać radę bez problemu przetłumaczyć na jaki chcesz język.

    Procedura licznika:
    TimerProc proc hWnd : DWORD, uMsg : DWORD, idEvent : DWORD, dwTime: DWORD
    
      ;kod który ma być wykonywany
      ret
    TimerProc EndP


    Start licznika:
    invoke SetTimer,hWin,1,10,TimerProc


    Stop licznika:
    invoke KillTimer,hWin,1
  • #4
    Ballbreaker
    Level 12  
    Zrobiłem to sposobem, jaki podał Serpent. Dodałem też coś od siebie:

    while (0 != GetMessage(&msg, NULL, WM_TIMER, WM_TIMER))
    {
    ....
    }
    

    Dzięki temu nie tracę czasu inne msgi.

    Problem rozwiązany :)