반응형
// 보통 Sleep() 함수를 사용하면 TTimer 의 동작도 멈추게 되는데
// MMTimer 를 사용하면 이벤트를 발생시킬 수 있습니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, mmsystem, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
MMTimer1 : integer;
end;
var
Form1: TForm1;
Cnt1, Cnt2 : integer;
implementation
{$R *.dfm}
procedure MyTimerCallBackProg(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
begin
Inc(Cnt1);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(Cnt2);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// timeSetEvent()의 첫번쨰 파라미터가 시간입니다
MMTimer1 := timeSetEvent(1,1,@MyTimerCallBackProg,100,TIME_PERIODIC);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
timeKillEvent(MMTimer1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
t : integer;
begin
Memo1.Lines.Clear;
Cnt1 := 0;
Cnt2 := 0;
Timer1.Enabled := False;
Timer1.Interval := 1;
Timer1.Enabled := True;
Sleep(5000); // 5초간 sleep
Memo1.Lines.Add('MMTimer 가 발생시킨 횟수: '+IntToStr(Cnt1));
Memo1.Lines.Add('TTimer 가 발생시킨 횟수: '+IntToStr(Cnt2));
end;
end.
반응형