mainfrm.pas
上传用户:psxgmh
上传日期:2013-04-08
资源大小:15112k
文件大小:2k
源码类别:

Delphi/CppBuilder

开发平台:

Delphi

  1. unit mainfrm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, Buttons;
  6. type
  7.   //定义一个测试线程
  8.   TTestThread = class(TThread)
  9.     procedure Execute; override;
  10.   end;
  11.   TMainForm = class(TForm)
  12.     btnLoadLib: TBitBtn;
  13.     btnFreeLib: TBitBtn;
  14.     BtnCreateThread: TBitBtn;
  15.     BtnFreeThread: TBitBtn;
  16.     lblCount: TLabel;
  17.     procedure btnLoadLibClick(Sender: TObject);
  18.     procedure btnFreeLibClick(Sender: TObject);
  19.     procedure BtnCreateThreadClick(Sender: TObject);
  20.     procedure BtnFreeThreadClick(Sender: TObject);
  21.     procedure FormCreate(Sender: TObject);
  22.   private
  23.     LibHandle: THandle;
  24.     TestThread: TTestThread;
  25.     Counter: integer;
  26.     GoThread: Boolean;
  27.     { Private declarations }
  28.   public
  29.     { Public declarations }
  30.   end;
  31. var
  32.   MainForm: TMainForm;
  33. implementation
  34. {$R *.dfm}
  35. //线程执行过程
  36. procedure TTestThread.Execute;
  37. begin
  38.   while MainForm.GoThread do
  39.   begin
  40.     MainForm.lblCount.Caption := IntTostr(MainForm.Counter);
  41.     Inc(MainForm.Counter);
  42.   end;
  43. end;
  44. procedure TMainForm.FormCreate(Sender: TObject);
  45. begin
  46.   LibHandle := 0;
  47.   TestThread := nil;
  48. end;
  49. //这个过程用于调入动态链接库DLLEntry.dll
  50. procedure TMainForm.btnLoadLibClick(Sender: TObject);
  51. begin
  52.   if LibHandle = 0 then
  53.   begin
  54.     LibHandle := LoadLibrary('DLLEntry.dll');
  55.     if LibHandle = 0 then
  56.       raise Exception.Create('Unable to Load DLL');
  57.   end
  58.   else
  59.     MessageDlg('Library already Loaded', mtWarning, [mbok], 0);
  60. end;
  61. //这个过程用于释放链接库
  62. procedure TMainForm.btnFreeLibClick(Sender: TObject);
  63. begin
  64.   if not (LibHandle = 0) then
  65.   begin
  66.     FreeLibrary(LibHandle);
  67.     LibHandle := 0;
  68.   end;
  69. end;
  70. //创建一个线程
  71. procedure TMainForm.BtnCreateThreadClick(Sender: TObject);
  72. begin
  73.   if TestThread = nil then
  74.   begin
  75.     GoThread := True;
  76.     TestThread := TTestThread.Create(false);
  77.   end;
  78. end;
  79. //释放一个线程
  80. procedure TMainForm.BtnFreeThreadClick(Sender: TObject);
  81. begin
  82.   if not (TestThread = nil) then
  83.   begin
  84.     GoThread := False;
  85.     TestThread.Free;
  86.     TestThread := nil;
  87.     Counter := 0;
  88.   end;
  89. end;
  90. end.