[Delphi][WinAPI] Timer

0

Chcę, aby jakaś część kodu była wykonywana co 5 sekund, bez mocnego obciążania procesora. Ma tak samo działać jak zwykły komponent TTimer w Delphi. Jak zrobić Timer w WinAPI?

0

Ech - wiem, że to jest dział Newbie, bo Delphi teraz i tak nie działa.
Ale przecież tak łatwe rzeczy i wszystko inne, można wygooglować.

program najpierw_zawsze_googluj_i_kombinuj_samodzielnie;

{$APPTYPE GUI}

uses
  WIndows, Messages;

const
  App_Class = 'Ucz_Sie_Podstaw';
  App_Title = 'Ucz się podstaw :)';

var
  AppHandle : HWND;

function IntToStr(I : Longint) : string;
var
  S : string[11];
begin
  Str(I, S);
  IntToStr := S;
end;

procedure Timer_Proc;
var
  R : integer;
begin
  R := Random(99999);
  SetWindowText(AppHandle, PChar(IntToStr(R)));
end;

function WndProc(Wnd : HWND; uMsg : UINT; wPar : WPARAM; lPar : LPARAM) : LRESULT; stdcall;
begin
  Result := 0;
  AppHandle := Wnd;
  case uMsg of
    WM_CREATE :
      begin
        Randomize;
        SetTimer(AppHandle, 0, 5000, @Timer_Proc);
      end;
    WM_DESTROY : PostQuitMessage(0);
  else Result := DefWindowProc(Wnd, uMsg, wPar, lPar);
  end;
end;

var
  Msg : TMsg;
  Wnd : TWndClass;
  WindowHandle : HWND;
begin
  with Wnd do
  begin
    lpfnWndProc := @WndProc;
    hInstance := hInstance;
    lpszClassName := App_Class;
    hbrBackground := COLOR_WINDOW;
  end;
  Windows.RegisterClass(Wnd);
  WindowHandle := CreateWindow(App_Class, App_Title,
    WS_VISIBLE or WS_TILEDWINDOW,
    300, 300, 500, 300, 0, 0, hInstance, nil);
  ShowWindow(WindowHandle, SW_SHOW);
  while GetMessage(Msg, 0, 0, 0) do
  begin
    DispatchMessage(Msg);
  end;
end.
0

Ogromne dzięki.

0

Proszę bardzo. Dodam tylko, że Timer zatrzymujesz funkcją KillTimer.
Gdzie drugim parametrem jest cyfra oznaczająca zdarzenie, a ktora to
jako drugi parametr podałeś przy tworzeniu Timera. Wiecej w msdnie.

  KillTimer(AppHandle, 0);

1 użytkowników online, w tym zalogowanych: 0, gości: 1