threadunit.pas
来自「DarkMoon v4.11 (远程控制) 国外收集的代码,控件下载: ht」· PAS 代码 · 共 103 行
PAS
103 行
{
Delphi Thread Unit by Aphex
http://iamaphex.cjb.net
unremote@knology.net
}
unit ThreadUnit;
interface
uses Windows;
type
TThread = class;
TThreadProcedure = procedure(Thread: TThread);
TSynchronizeProcedure = procedure;
TThread = class
private
FThreadHandle: longword;
FThreadID: longword;
FExitCode: longword;
FTerminated: boolean;
FExecute: TThreadProcedure;
FData: pointer;
protected
public
constructor Create(ThreadProcedure: TThreadProcedure; CreationFlags: Cardinal);
destructor Destroy; override;
procedure Synchronize(Synchronize: TSynchronizeProcedure);
procedure Lock;
procedure Unlock;
property Terminated: boolean read FTerminated;
property ThreadHandle: longword read FThreadHandle;
property ThreadID: longword read FThreadID;
property ExitCode: longword read FExitCode;
property Data: pointer read FData write FData;
end;
implementation
var
ThreadLock: TRTLCriticalSection;
procedure ThreadWrapper(Thread: TThread);
var
ExitCode: dword;
begin
Thread.FTerminated := False;
try
Thread.FExecute(Thread);
finally
GetExitCodeThread(Thread.FThreadHandle, ExitCode);
Thread.FExitCode := ExitCode;
Thread.FTerminated := True;
ExitThread(ExitCode);
end;
end;
constructor TThread.Create(ThreadProcedure: TThreadProcedure; CreationFlags: Cardinal);
begin
inherited Create;
FExitCode := 0;
FExecute := ThreadProcedure;
FThreadHandle := BeginThread(nil, 0, @ThreadWrapper, Pointer(Self), CreationFlags, FThreadID);
end;
destructor TThread.Destroy;
begin
inherited;
CloseHandle(FThreadHandle);
end;
procedure TThread.Synchronize(Synchronize: TSynchronizeProcedure);
begin
EnterCriticalSection(ThreadLock);
try
Synchronize;
finally
LeaveCriticalSection(ThreadLock);
end;
end;
procedure TThread.Lock;
begin
EnterCriticalSection(ThreadLock);
end;
procedure TThread.Unlock;
begin
LeaveCriticalSection(ThreadLock);
end;
initialization
InitializeCriticalSection(ThreadLock);
finalization
DeleteCriticalSection(ThreadLock);
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?