⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umain.~pas

📁 硬盘测速软件,可以测试硬盘的读写速度,也可以测试硬盘性能.能够测试不同的文件块大小,文件大小,能够循环测试
💻 ~PAS
字号:
unit umain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl,uthdthread;

type
  TMain = class(TForm)
    dcb: TDriveComboBox;
    cbbBlockSize: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    edtMax: TEdit;
    Button1: TButton;
    Button2: TButton;
    cbbFileSize: TComboBox;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    edtAvr: TEdit;
    edtMin: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Memo1: TMemo;
    ckRepeat: TCheckBox;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    FMaxSpeed: integer;
    FAvrSpeed: integer;
    FMinSpeed: integer;
    procedure SetAvrSpeed(const Value: integer);
    procedure SetMaxSpeed(const Value: integer);
    procedure SetMinSpeed(const Value: integer);
  private
    { Private declarations }
     IsAbort :boolean;
     TotalSize,TotalTime :DWord;
     strlist :TStringlist;
     thd :TTHDThread;
//     procedure WriteAFile(filename :string;blocksize:integer;filesize:integer);
//     procedure TestDriver(Driver :Char;IsRepeat:boolean);
     procedure SetControlEnable(Enable:boolean);     
  public
    { Public declarations }
     property MaxSpeed :integer read FMaxSpeed write SetMaxSpeed;
     property AvrSpeed :integer read FAvrSpeed write SetAvrSpeed;
     property MinSpeed :integer read FMinSpeed write SetMinSpeed;
  end;

var
  Main: TMain;

implementation

uses uabout;

{$R *.dfm}
{
procedure TMain.WriteAFile(filename: string; blocksize, filesize: integer);
var
  hfile :THandle;
  buf :array of char;
  wrtnlen :dword;
  len :dword;
  i :integer;
  count :integer;
begin
  try
    hfile := CreateFile(pchar(filename),GENERIC_WRITE,FILE_SHARE_READ	,nil,CREATE_ALWAYS,
      FILE_ATTRIBUTE_ARCHIVE,0);
    count := filesize*1024 div blocksize;
    len := 1024*blocksize;
    SetLength(Buf,len);
    FillMemory(buf,len,random(255));
    for i := 0 to count - 1 do
    begin
      if IsAbort then
        break;
      WriteFile(hfile,buf[0],len,wrtnlen,nil);
      if IsAbort then
        break;
    end;
  finally
    closehandle(hfile);
  end;

end;
 }
procedure TMain.Button1Click(Sender: TObject);
begin
  SetControlEnable(false);
  button1.Enabled := false;
  IsAbort := False;
//  TestDriver(dcb.Drive,ckRepeat.Checked);

  thd.Driver := dcb.Drive;
  thd.IsRepeat := ckrepeat.Checked;
  thd.iBlockSize := strtoint(cbbBlockSize.Text);
  thd.iFileSize := strtoint(cbbFileSize.Text);

  thd.IsTest := true;

//  button1.Enabled := true;
//  SetControlEnable(true);
end;
{
procedure TMain.TestDriver(Driver: Char;IsRepeat:boolean);
var
  speed :integer;
  startTick,EndTick:DWord;
  count,i :integer;
  dwdiskfree :int64;
  filename :string;
begin
  repeat
    TotalSize := 0;
    TotalTime := 0;
    maxspeed := 0;
    minspeed := 160;
    avrspeed := 0;

    dwdiskfree := DiskFree(ord(driver) -ord('a')+1);
    dwDiskfree := dwDiskFree div 1024 div 1024;
    count := dwDiskFree div strtoint(cbbfilesize.text);
  
    for i := 0 to count - 1 do
    begin
      if IsAbort then
        break;
      starttick := gettickcount();
      filename := driver+':\'+formatdatetime('yymmddh24mnss',now())+'.hdt';
      WriteAFile(filename,strtoint(cbbblockSize.text),strtoint(cbbfilesize.text));
      strlist.Add(filename);

      endtick := gettickcount();

      speed := strtoint(cbbfilesize.text) div ((endtick-starttick)div 1000);
      if speed > maxspeed then maxspeed := speed;
      if Speed < MinSpeed then Minspeed := speed;

      TotalSize := TotalSize + strtoint(cbbfilesize.text);
      TotalTime := TotalTime + ((endtick-starttick) div 1000);
      AvrSpeed := TotalSize div TotalTime ;

      if IsAbort then
        break;
    end;

    memo1.Lines.Add(datetimetostr(now())+':');
    memo1.Lines.Add('平均速度:'+inttostr(AvrSpeed));
    memo1.Lines.Add('最大速度:'+inttostr(MaxSpeed));
    memo1.Lines.Add('最小速度:'+inttostr(MinSpeed));
    memo1.Lines.Add('');
    for i := 0 to strlist.Count - 1 do
    begin
      deletefile(strlist.Strings[0]);
      strlist.Delete(0);
    end;
  until (not IsRepeat) or (IsAbort)

end;
  }
procedure TMain.FormCreate(Sender: TObject);
begin
  IsAbort := False;
  strlist := TStringList.Create;
  thd := TTHDThread.Create(false);
end;

procedure TMain.Button2Click(Sender: TObject);
begin
  thd.IsTest := false;
  CancelIO(thd.hfile);

  button1.Enabled := true;
  SetControlEnable(true);
end;

procedure TMain.SetAvrSpeed(const Value: integer);
begin
  FAvrSpeed := Value;
  edtAvr.Text := inttostr(FAvrSpeed);
end;

procedure TMain.SetMaxSpeed(const Value: integer);
begin
  FMaxSpeed := Value;
  edtMax.Text := inttostr(FMaxSpeed);
end;

procedure TMain.SetMinSpeed(const Value: integer);
begin
  FMinSpeed := Value;
  edtMin.Text := inttostr(FMinSpeed);
end;

procedure TMain.SetControlEnable(Enable: boolean);
begin
  dcb.Enabled := enable;
  cbbblocksize.Enabled := enable;
  cbbfilesize.Enabled := enable;
end;

procedure TMain.FormDestroy(Sender: TObject);
begin
  strlist.Clear;
  strlist.Free;
  thd.IsTest := False;
  thd.Terminate;
  CancelIO(thd.hfile);
  thd.Free;
  
end;

procedure TMain.Button3Click(Sender: TObject);
begin
  about := TAbout.Create(self);
  about.ShowModal;
  about.Free;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -