回 帖 发 新 帖 刷新版面

主题:[讨论]求PASCAL计时器的用法

请教高手!怎么样在PASCAL利用计时器?
我和同学打赌我程序速度比他快,但是现在没有好的计时手段啊!
回答加分啊!

回复列表 (共12个回复)

沙发

用dos单元的gettime函数

板凳

编写bat(dos批处理文件)文件

3 楼

@echo off
time <新建 文本文档.txt
程序名
time <新件 文本文档.txt

4 楼

请问新建文本文档里有什么内容?

5 楼

一个回车

6 楼

可以新建一个文件
什么都不写
直接把文件名改为ENTER
和测试用的BAT文件放在一起可以少按几个空格

7 楼

@echo off
time <新建 文本文档.txt
程序名
time <新件 文本文档.txt

8 楼

这是一个计时器单元:

{ millisecond timer Unit }

Unit msecs;

Interface

Var
   timer:Word;                     { msec timer }
   idle:Procedure; {  you can change this to do something useful when Delaying}

Procedure Delay_ticks(t:Word);     { resume Until t clock ticks have elapsed }
Procedure start_clock;             { starts the 1 msec timer }
Procedure stop_clock;              { stops the 1 msec timer }

Implementation

Uses Dos;

Procedure Delay_ticks(t:Word);
begin
  inc(t,timer);
  Repeat idle Until Integer(timer - t) >= 0;
end;

Const clock_active:Boolean = False;
      one_msec = 1193;
Var   save_clock:Pointer;
      clocks:Word;

Procedure tick_int; Far; Assembler;
Asm
  push ax
  push ds
  mov ax,seg @data
  mov ds,ax
  mov al,$20
  out $20,al
  inc [timer]
  add [clocks],one_msec
  jnc @1
  pushf
  call [save_clock]
@1:
  pop ds
  pop ax
  iret
end;


Procedure start_clock;
begin
  if clock_active then Exit;
  inc(clock_active);
  timer := 0;
  clocks := 0;
  getintvec($08,save_clock);
  setintvec($08,@tick_int);
  port[$43] := $36;
  port[$40] := lo(one_msec);
  port[$40] := hi(one_msec);
end;

Procedure stop_clock;
begin
  if not clock_active then Exit;
  dec(clock_active);
  port[$43] := $36;
  port[$40] := 0;
  port[$40] := 0;
  setintvec($08,save_clock);
end;

Procedure nothing; Far;
begin
end;

Var saveexit:Pointer;

Procedure uninstall; Far;
begin
  Exitproc := saveexit;
  if clock_active then stop_clock;
end;

begin
  timer := 0;
  idle := nothing;
  saveexit := Exitproc;
  Exitproc := @uninstall;
end.

以上

9 楼

@echo off
if "%1"=="" goto loop
copy [i][b]work1%1.in [/b][/i][i][b]work1.in [/b][/i]>nul
echo Problem Test
echo Data %1
time<enter
[i][b]work1[/b][/i]
time<enter
fc [i][b]work1.out work1%1.out[/b][/i]
del [i][b]work1.in[/b][/i]
del [i][b]work1.out[/b][/i]
pause
goto end
:loop
for %%i in ([i][b]1 2 3 4 5 6 7 8 9 10[/b][/i]) do call %0 %%i
:end

10 楼

加粗部分为根据实际情况修改

我来回复

您尚未登录,请登录后再回复。点此登录或注册