首页 > 其他分享 >ChatGPT: delphi 实现生产者消费者队列处理多线程示例

ChatGPT: delphi 实现生产者消费者队列处理多线程示例

时间:2023-02-10 15:36:34浏览次数:36  
标签:begin TProducer end TThreadedQueue 示例 delphi Item 多线程 Create

uses
  Classes, SyncObjs;

type
  TItem = class
    Data: Integer;
  end;

  TProducer = class(TThread)
  private
    FQueue: TThreadedQueue<TItem>;
  protected
    procedure Execute; override;
  public
    constructor Create(AQueue: TThreadedQueue<TItem>);
  end;

  TConsumer = class(TThread)
  private
    FQueue: TThreadedQueue<TItem>;
  protected
    procedure Execute; override;
  public
    constructor Create(AQueue: TThreadedQueue<TItem>);
  end;

constructor TProducer.Create(AQueue: TThreadedQueue<TItem>);
begin
  inherited Create(False);
  FQueue := AQueue;
end;

procedure TProducer.Execute;
var
  I: Integer;
  Item: TItem;
begin
  for I := 1 to 100 do
  begin
    Item := TItem.Create;
    Item.Data := I;
    FQueue.Enqueue(Item);
    Sleep(10);
  end;
end;

constructor TConsumer.Create(AQueue: TThreadedQueue<TItem>);
begin
  inherited Create(False);
  FQueue := AQueue;
end;

procedure TConsumer.Execute;
var
  Item: TItem;
begin
  while not Terminated do
  begin
    if FQueue.TryDequeue(Item) then
    begin
      WriteLn(Format('Data: %d', [Item.Data]));
      Item.Free;
      Sleep(20);
    end
    else
      Sleep(10);
  end;
end;

var
  Queue: TThreadedQueue<TItem>;
  Producer: TProducer;
  Consumer: TConsumer;
begin
  Queue := TThreadedQueue<TItem>.Create;
  try
    Producer := TProducer.Create(Queue);
    Consumer := TConsumer.Create(Queue);
    try
      Producer.Start;
      Consumer.Start;
      Producer.WaitFor;
      Consumer.Terminate;
      Consumer.WaitFor;
    finally
      Producer.Free;
      Consumer.Free;
    end;
  finally
    Queue.Free;
  end;
end.

这是一个使用线程安全队列 TThreadedQueue 来实现生产者消费者模型的示例。TProducer 线程生成数据并将其添加到队列中,而 TConsumer 线程从队列中获取数据并处理

 

标签:begin,TProducer,end,TThreadedQueue,示例,delphi,Item,多线程,Create
From: https://www.cnblogs.com/onlyou13/p/17109099.html

相关文章

  • ChatGPT: delphi rtti访问类公共属性生成json字符串
    usesSystem.Rtti,System.JSON;typeTPerson=classpublicName:string;Age:Integer;end;functionObjectToJSON(AObject:TObject):string;......
  • ChatGPT: delphi ass字幕转srt字幕
    usesSysUtils,Classes,DateUtils;constLineBreak=#13#10;typeTSubtitle=recordStart,Stop:TDateTime;Text:string;end;functionPa......
  • JVM sandbox 实现热修复示例
    JVM-SANDBOX简介JVM-SANDBOX(沙箱)实现了一种在不重启、不侵入目标JVM应用的AOP解决方案。GIT地址https://github.com/alibaba/jvm-sandbox具有以下特性:1)无侵入:目标应......
  • Java多线程06——JUC并发包02
    1线程的同步工具类​​CountDownLatch​​​​CountDownLatch​​同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。​​CountDownLatch......
  • 如何使用 Python 编程进行多线程并发?
    当单线程python爬虫已经不能满足企业需求时,很多程序员会进行改代码或者增加服务器数量,这样虽说也能达到效果,但是对于人力物力也是一笔不小的消耗。如果是技术牛点的,正常都......
  • delphi FireDAC使用ApplyUpdates批量提交数据
    简单的设计一下界面,大致如下:要求:审核或者反审核用户选择的数据1.当记录已审核时,再点审核会提示出错,反审核也一样2.正常点审核时,审核=true,审核人=当前用......
  • 附录E示例-空间分解_1
    附录E示例-空间分解_1示例概述空间分解_1意图给定的场景展示了组合IfcFacility和IfcFacilityPart实例的选项。 先决条件此方案基于以下其他方案:-ProjectSetup_1 ......
  • DHCP 客户端实现示例
    【问题描述】:我已经搜索了很长时间,但似乎无法在C#中找到有效的DHCP客户端实现示例。我是网络编程的新手,但我正在做一些研究,需要我编写手动DHCP客户端并在没有DHCP......
  • Practice2.多线程
    实验任务使用Pthreads库创建多个线程,并观察线程的并发执行现象以及数据共享关系MonteCarlo技术计算Π值(多线程):Π=4*(圆内点数)/(总的点数)1.随机的生成一个点Rando......
  • AD2428W手册解读之其他发现流程示例
    1、修改的发现流程        在修改后的发现流程图中,所有从节点都会被发现并立即按顺序初始化,从0号从节点到系统中最后一个可用的从节点。        在发现并编......