博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DIOCP任务队列和工作线程
阅读量:4977 次
发布时间:2019-06-12

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

DIOCP任务队列和工作线程

涉及4个单元文件:utils_strings.pas,utils_queues.pas,utils_queueTask.pas,utils_grouptask.pas。

TDQueueTask,只给任务队列开启一个工作线程来执行队列中的任务。

TGroupTask,可以给任务队列指定要开启几个工作线程来执行队列中的任务。

其实,单使用TGroupTask就可以了,可以将TDQueueTask看作是TGroupTask的子集。

大致原理:往队列中提交任务(入队),工作线程从队列中获取任务(出队),通过回调函数来执行任务。

下面上演示代码(DELPHI7测试通过):

/// 
cxg 2019-6-25
unit Unit1;interfaceuses utils_grouptask, utils_queueTask, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TTest = record f1: string; end; PTest = ^TTest;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } task: TDQueueTask; task2: TGroupTask; procedure callback(pSender: TDQueueTask; pvTaskData: Pointer); procedure callback2(pvSender: TGroupTask; pvWorker: TGroupTaskWorker; pvData: Pointer); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.callback(pSender: TDQueueTask; pvTaskData: Pointer);begin Caption := PTest(pvTaskData).f1; Dispose(pvTaskData);end;procedure TForm1.callback2(pvSender: TGroupTask; pvWorker: TGroupTaskWorker; pvData: Pointer);begin Caption := PTest(pvData).f1; Dispose(pvData);end;procedure TForm1.FormCreate(Sender: TObject);var p, p2: PTest;begin task := TDQueueTask.Create; task.OnExecute := callback; New(p); p.f1 := '我是一个任务'; task.PostATask(p); task2 := TGroupTask.Create; task2.CheckCreateWorker(1); task2.OnWorkerExecute := callback2; New(p2); p2.f1 := '我是二个任务'; task2.PostATask(p2);end;procedure TForm1.FormDestroy(Sender: TObject);begin FreeAndNil(task); FreeAndNil(task2);end;end.

  

 

转载于:https://www.cnblogs.com/hnxxcxg/p/11080875.html

你可能感兴趣的文章
《性能测试二三谈》系列
查看>>
2743: [HEOI2012]采花
查看>>
std::string char* CCString 区别和转换
查看>>
jquery easyui datagrid 如何第一次点击列标题时是降序排列
查看>>
第二周学习总结
查看>>
第二次实验
查看>>
【Java架构:基础技术】一篇文章搞掂:MyBatis
查看>>
room-views-用窗口颜色清除背景(Clear Background with Window Colour)选项
查看>>
OCR识别
查看>>
MySQL 性能调优的10个方法
查看>>
移动端单指拖 双值旋转缩放(改动版)
查看>>
经常使用排序算法时间复杂度和空间复杂度简析
查看>>
在 CentOS 6 上安装 PHP 5.4.30
查看>>
介绍 32 位和 64 位版本的 Microsoft Office 2010
查看>>
Python使用inspect查看代码参数
查看>>
jvisualvm远程监控Tomcat
查看>>
类就是类型,类型就是类
查看>>
修改Windows中文用户名为英文(更全面的方法)
查看>>
mysql主从复制
查看>>
jloi2017(shoi2017?)六省联考酱油记
查看>>