wp_xxyyzz 33f7d1b3af epiktimer: Fix compilation for fpc3.0
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5251 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2016-10-08 11:50:29 +00:00

290 lines
7.4 KiB
ObjectPascal

unit main;
{ Name: EpikTimer Demo Program
Description: Test application
Author: Tom Lisjac <vlx@users.sourceforge.net>
Demonstrates the capabilities of TEpikTimer in epiktimer.pas
}
{ Copyright (C) 2003 by Tom Lisjac <vlx@users.sourceforge.net>
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA.
}
{
Contributors
Felipe Monteiro de Carvalho (felipemonteiro.carvalho@gmail.com)
Known Issues
- Quickly written and completely undocumented... but there's nothing
complicated going on in this unit.
Change log
Initially written on 28-06-2003 TL
Pre-release 30-06-2003 TL - Needs testing on systems without CPUID and TSC hardware
15-11-2005
Removed Linux unit to compile on Windows. It happens that main.pas didn´t
use this unit.
}
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
Buttons, StdCtrls, ExtCtrls, EpikTimer, ComCtrls, Grids, newsw;
Const
MaxStopwatches=10;
type
TForm1 = class(TForm)
Button1: TBUTTON;
Button10: TBUTTON;
Button11: TBUTTON;
Button12: TBUTTON;
Button13: TBUTTON;
Button14: TBUTTON;
Button15: TBUTTON;
Button16: TBUTTON;
Button17: TBUTTON;
Button18: TBUTTON;
Button2: TBUTTON;
Button3: TBUTTON;
Button4: TBUTTON;
Button5: TBUTTON;
Button6: TBUTTON;
Button7: TBUTTON;
Button8: TBUTTON;
Button9: TBUTTON;
Checkbox2: TCHECKBOX;
Checkbox3: TCHECKBOX;
Checkbox4: TCHECKBOX;
Combobox1: TCOMBOBOX;
Edit1: TEDIT;
Edit11: TEDIT;
Edit2: TEDIT;
Edit3: TEDIT;
Edit4: TEDIT;
Edit5: TEDIT;
Edit6: TEDIT;
Edit7: TEDIT;
Edit8: TEDIT;
Edit9: TEDIT;
Groupbox1: TGROUPBOX;
Groupbox2: TGROUPBOX;
Groupbox3: TGROUPBOX;
Groupbox4: TGROUPBOX;
Groupbox5: TGROUPBOX;
Idletimer1: TIDLETIMER;
Label1: TLABEL;
Label10: TLABEL;
Label11: TLABEL;
Label12: TLABEL;
Label13: TLABEL;
Label16: TLABEL;
Label17: TLABEL;
Label2: TLABEL;
Label3: TLABEL;
Label4: TLABEL;
Label5: TLABEL;
Label6: TLABEL;
Label7: TLABEL;
Label8: TLABEL;
Label9: TLABEL;
Memo1: TMEMO;
Memo2: TMEMO;
Memo3: TMEMO;
Memo4: TMEMO;
Panel1: TPANEL;
Radiogroup1: TRADIOGROUP;
procedure Button18CLICK(Sender: TObject);
procedure Button1CLICK(Sender: TObject);
procedure Button2CLICK(Sender: TObject);
procedure Button3CLICK(Sender: TObject);
procedure Button4CLICK(Sender: TObject);
procedure Button5CLICK(Sender: TObject);
procedure Button6CLICK(Sender: TObject);
procedure Button7CLICK(Sender: TObject);
procedure Button8CLICK(Sender: TObject);
procedure Checkbox2CLICK(Sender: TObject);
procedure Checkbox3CLICK(Sender: TObject);
procedure Combobox1CHANGE(Sender: TObject);
procedure Form1CREATE(Sender: TObject);
procedure Form1DESTROY(Sender: TObject);
procedure Radiogroup1CLICK(Sender: TObject);
private
CurFreq,PrevFreq:Extended;
CorrelationJitter:Extended;
Iter:Integer;
public
ET:TEpikTimer;
end;
var
Form1: TForm1;
NewStopwatches:array[1..MaxStopwatches] of Tform2;
implementation
{ TForm1 }
procedure TForm1.Button1CLICK(Sender: TObject);
Var TimerNumber:Integer;
begin
TimerNumber:=StrtoInt(Tbutton(Sender).Caption);
With Newstopwatches[TimerNumber] do
Begin
Left:=TimerNumber*8;
Top:=TimerNumber*8;
Caption:='Stopwatch '+Tbutton(Sender).Caption;
visible:=true;
show
End
end;
procedure TForm1.Button18CLICK(Sender: TObject);
begin
Showmessage('EpikTimer component demo program'+#10#10+
'By Tom Lisjac <vlx@users.sourceforge.net>'+#10+
'Additional information about this program can be found at http://theseus.sourceforge.net/fpclaz'+#10+
'or by contacting the author.');
end;
procedure TForm1.Button2CLICK(Sender: TObject);
begin
ET.Start;
Edit5.text:=ET.WallClockTime;
end;
procedure TForm1.Button3CLICK(Sender: TObject);
begin
ET.Stop;
edit11.text:=ET.WallClockTime;
end;
procedure TForm1.Button4CLICK(Sender: TObject);
begin
edit2.text:=ET.ElapsedStr;
Edit3.text:=ET.elapsedDHMS;
edit8.text:=ET.WallClockTime;
end;
procedure TForm1.Button5CLICK(Sender: TObject);
begin
ET.Clear;
edit1.text:=ET.WallClockTime;
edit2.text:=ET.ElapsedStr;
Edit3.text:=ET.elapsedDHMS;
end;
procedure TForm1.Button6CLICK(Sender: TObject);
begin
edit4.text:=format('%.0n',[extended(ET.GetHardwareTicks)]);
edit6.text:=format('%.0n',[extended(ET.GetSystemTicks)]);
end;
procedure TForm1.Button7CLICK(Sender: TObject);
begin
Inc(Iter);
ET.CalibrateCallOverheads(ET.SelectedTimebase^);
ET.CalibrateTickFrequency(ET.SelectedTimebase^);
With ET.SelectedTimebase^ do
Begin
memo2.lines.insert(0,format('%2.0d:%.0n',[Iter,extended(SleepOverhead)]));
memo3.lines.insert(0,format('%2.0d:%.0n',[Iter,extended(TicksOverhead)]));
memo4.lines.insert(0,format('%2.0d:%.0n',[Iter,extended(TicksFrequency)]));
CurFreq:=TicksFrequency;
memo1.lines.insert(0,format('%2.0d:%.0n',[Iter,CurFreq-PrevFreq]));
End;
PrevFreq:=CurFreq;
end;
procedure TForm1.Button8CLICK(Sender: TObject);
Var
CorrelatedTickFrequency:TickType;
tbdata: TimeBaseData;
begin
CorrelatedTickFrequency:=ET.GetTimebaseCorrelation;
Edit9.text:=format('%.0n',[extended(CorrelationJitter-CorrelatedTickFrequency)]);
Edit7.text:=format('%.0n',[extended(CorrelatedTickFrequency)]);
CorrelationJitter:= CorrelatedTickFrequency;
If checkbox4.checked then begin
tbdata := ET.HWTimebase;
tbdata.TicksFrequency := trunc(CorrelatedTickFrequency);
ET.HWTimebase := tbdata;
end;
end;
procedure TForm1.Checkbox2CLICK(Sender: TObject);
begin
ET.WantMilliseconds:=Checkbox2.checked
end;
procedure TForm1.Checkbox3CLICK(Sender: TObject);
begin
ET.WantDays:=Checkbox3.checked
end;
procedure TForm1.Combobox1CHANGE(Sender: TObject);
begin
ET.StringPrecision:=ComboBox1.Itemindex;
end;
procedure TForm1.Form1CREATE(Sender: TObject);
Var S:String;
begin
Iter:=0;
PrevFreq:=0.0;
CorrelationJitter:=0.0;
ET:=TEpikTimer.create(nil);
RadioGroup1.itemindex:=ord(ET.TimebaseSource);
ComboBox1.itemindex:=ET.StringPrecision;
If ET.HWCapabilityDataAvailable then S:='Yes' else S:='No';
Label6.caption:=label6.caption+S;
If ET.HWTickSupportAvailable then S:='Yes' else S:='No';
Label7.caption:=label7.caption+S;
If ET.MicrosecondSystemClockAvailable then S:='Yes' else S:='No';
Label11.caption:=Label11.caption+S;
Checkbox2.checked:=ET.WantMilliseconds;
Checkbox3.checked:=ET.WantDays;
Application.showhint:=true;
end;
procedure TForm1.Form1DESTROY(Sender: TObject);
begin
ET.free;
end;
procedure TForm1.Radiogroup1CLICK(Sender: TObject);
begin
ET.TimebaseSource:= TickSources(Radiogroup1.itemindex);
Radiogroup1.itemindex:=ord(ET.TimebaseSource); // verifies the change
Iter:=0;
end;
initialization
{$i main.lrs}
end.