delphi 线程的使用
发布日期:2021-08-25 00:32:41 浏览次数:7 分类:技术文章

本文共 1959 字,大约阅读时间需要 6 分钟。

unit untWorkThread;interfaceuses  Windows,Classes,SysUtils;type  TWorkItem=class  end;  TProcessWork=procedure (Sender:TObject;Work:TWorkItem) of Object;  TWorkThread=class(TThread)  private    FCriticalSection:TRTLCriticalSection;    hEvent:Cardinal;    FList:TList;    FProcessWork:TProcessWork;    procedure ProcessWork(Work:TWorkItem);    function GetWork(var AWork:TWorkItem):Boolean;  protected    procedure Execute;override;  public    procedure AddWork(AWork:TWorkItem);    constructor Create;    destructor Destroy; override;    property OnProcessWork:TProcessWork read FProcessWork write FProcessWork;  end;implementation{
TWorkThread}constructor TWorkThread.Create;begin InitializeCriticalSection(FCriticalSection); hEvent:=CreateEvent(nil,False,False,nil); FList:=TList.Create; Self.FreeOnTerminate:=False; inherited Create(False);end;destructor TWorkThread.Destroy;var i:Integer;begin for i:=FList.Count-1 downto 0 do TWorkItem(FList.Items[i]).Free; DeleteCriticalSection(FCriticalSection); FList.Free; CloseHandle(hEvent);end;function TWorkThread.GetWork(var AWork:TWorkItem):Boolean;begin Result:=False; EnterCriticalSection(FCriticalSection); try if FList.Count>0 then begin AWork:=TWorkItem(FList.Items[0]); FList.Delete(0); Result:=True; end; finally LeaveCriticalSection(FCriticalSection); end;end;procedure TWorkThread.Execute;var Work:TWorkItem;begin while not Self.Terminated do begin WaitForSingleObject(hEvent,INFINITE); while GetWork(Work) do begin ProcessWork(Work); Work.Free; end; end;end;procedure TWorkThread.ProcessWork(Work:TWorkItem);begin if Assigned(FProcessWork) then FProcessWork(Self,Work);end;procedure TWorkThread.AddWork(AWork:TWorkItem);begin EnterCriticalSection(FCriticalSection); try FList.Add(AWork); finally LeaveCriticalSection(FCriticalSection); end; SetEvent(hEvent);end;end.

 

转载于:https://www.cnblogs.com/china1/p/3395141.html

转载地址:https://blog.csdn.net/weixin_33836223/article/details/94469719 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Sublime Text在Ubuntu下无法输入中文的解决方案
下一篇:OpenCV笔记(五)——基本的绘图操作

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月28日 09时36分15秒