Skocz do zawartości

setTime limit i zmiana tekstu


Recommended Posts

Napisano
#define ID_TIMER 1
char szText[32];

//...

case WM_CREATE:
  // Tutaj ustawiamy zegar aby tykal co jedna sekunde
  SetTimer(hWnd, ID_TIMER, 1000, NULL); // 1000 - to jest jednasekunda

//...

// Tutaj odbieramy komunikat co jedna sekunde i rysujemy sobie zmieniony text
case WM_TIMER:
  if(Param==ID_TIMER)
  {
    // Tutaj sobie zmieniasz w jakis sposob swój text w zmiennej szText
    hdc = GetDC(hWnd);
    TextOut(hdc, 0, 0, szText strlen(szText));
    ReleaseDC(hWnd, hdc);
  }

//...

case WM_DESTROY:
  // Tutaj niszczymy zegar
  KillTimer(hWnd, ID_TIMER);

//...

Inny sposob to np ustawic procedure wzrotna dla tego zegara i bedzie ona wywolywana co okreslony czas - w twoim wypadku co sekunde - i tam mzoesz robic co chcesz - ale o tym poczytaj sobie głębiej w MSDNie.
Mozesz takze w komunikacie WM_TIMER tylko zmieniac text i wymuszac odmalwoanie sie okna i w komunikacie WM_PAINT tylko rysujesz napis funkcja TextOut.

Napisano

Witam!

Mam pytanka nawiazujace do tematu.

W win98 i Dosie bylo cos takiego jak przerwanie zegarowe generowane od timera. Z tego powodu aplikacje nie moga otrzymywac komunikatu WM_TIMER nie czesciej niz 55ms.

W NT ta warosc wynosi 10ms.

1.A jak to jest w 2000/xp/2003 czy to tez jest 10ms?

Bo w MSDN-ie pisza o wartosci USER_TIMER_MINIMUM:

https://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers/TimerReference/TimerFunctions/SetTimer.asp

Ale ile ona wynosi?Ewentualnie jak to sprawdzic?

Jesli bym chcial odmierzyc dokladnie czas w MSDN-ie znalazlem funkcje:
QueryPerformanceCounter
QueryPerformanceFrequency

https://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers/TimerReference/TimerFunctions/QueryPerformanceFrequency.asp

2.Czy czestotliwosc uzywana w funkcji QueryPerformanceFrequency zalezy od czestotliwosci procesora? Bo gdybym chcial przenies programik na kompa o innej czestotliwosci procka to czy bedzie jakas zmiana w tej czestotliwosci?

Dzieki za wszelkie odpowiedzi!

Napisano

win2k i 2003 to sa NTeki wiec chyba maja tez 10ms ale nie mówie to z 100% pewnością. A co do reszty to nie wiem. Mi nawet mój "kompilatorek" VC++6 nie rozpoznaje tego USER_TIMER_MINIMUM.

  • 3 weeks later...
Napisano

Najlepiej do tego wykorzystac osobny watek.

Zakladasz taki watek dla obslugi zmiany tekstu w oknie (lub wielu oknach).
Faszerujesz go GetTickCount-ami czy RDTSC-ami i wysterowujesz kontrolki bez zadnego bawienia sie w minimialne timery, blokowanie petli komunikatow, czy inne niepozadane zjawiska.

Minus taki ze troche sie trzeba napisac, ale plus ze mozna niezle zbajerowac program wysterowujac wiele okien na rozne sposoby.

  • 2 weeks later...
Napisano

To chyba jednak nienajlepsze rozwiazanie.

Kazdy, nawet pojedynczy, i nawet najglupszy watek w stylu

while(true);

powoduje w systemie Win XP prawie 100% obciazenia systemu.
Czemu tak jest???

Bo WM_TIMER dziala w tle lagodnie i bez hardcore, z tego wzgledu jest baaaardziej elegancki.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...