OmniThreadLibrary 中文说明文档
OmniThreadLibrary 学习笔记(一)任务与线程
(Task and Thread)
OmniThreadLibrary,简称 OTL,为使用多线程开发应用,提供一个强大而高效的开发方法,使
开发者完全基于任务(Task)开发应用。什么是任务呢,个人理解,就是要在线程执行中的
逻辑代码。下面来看看,官方 Wiki 中的说明:
在 OTL 中,开发者不用创建线程(Thread)而是任务,任务即可以新建的线程中执行,也可以
在一个现有的线程中运行,还可以放到线程池(ThreadPool)中去运行。
利用 CreateTask 函数来创建一个任务,CreateTask 有一个参数,可以是一个全局的过程,一
个方法,一个 TOmniWorker 的子类的实例或者一个匿名方法(delphi 2009 以后版本)。查看
CreateTask 代码,可以看到作者实现了四个 CreateTask 函数来支持上面的四种建立任务的方
法。
//支持匿名方法
function CreateTask(worker: TOmniTaskDelegate; const taskName: string = ''): IOmniTaskControl;
//支持全局过程
function CreateTask(worker: TOmniTaskProcedure; const taskName: string): IOmniTaskControl;
//支持方法
function CreateTask(worker: TOmniTaskMethod; const taskName: string): IOmniTaskControl;
//支持 TOmniWorker 的实例
function CreateTask(const worker: IOmniWorker; const taskName: string): IOmniTaskControl;
这四个方法,都返回 IOmniTaskControl 接口,用来在主线程中控制 Task.新建的任务总是处
在挂起状态,只有通过调用 IOmniTaskControl 接口的 Run 方法,才使用任务开始执行。或者
调用 IOmniTaskControl 的
Schedule 方法,将任务放到一个线程池中。
任务有一个可访问的接口 IOmniTask,通过该接口可以与主线程通讯,比如发送与接收消息。
综上,可以概述为:
任务是一部分在线程中执行的代码
线程则是运行任务的一个环境。