网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
DELPHI下的多线程程序设计
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

TThread是一个abstract(抽象)类,也就是说,并不需要根据TThread来声明变量(而且根据TThread声

明的变量也是完全无用),我们要做的是把TThread作为基类,用继承的形式来生成子类。实际上,根据

TThread来写多线程应用程序是非常容易的。

下面就是一个基本的继承TThread生成的多线程类。

QuerThrd.Pas

unitQuerThrd;

interface

uses

Classes,DBTables;

type

TQueryThreadΚclass(TThread)

private

fQuery:tQuery;

protected

procedureExecute;override;

public

constructorCreate(Suspended:Boolean;Query:

TQuery);

end;

implementation

constructor

TQueryThread.Create(Suspended:Boolean;Quer

y:TQuery);

begin

inheritedCreate(Suspended);

fQuery:ΚQuery;

FreeOnTerminate:ΚTrue;

end;

procedureTQueryThread.Execute;

begin

fQuery.Open;

end;

end.

在上面这个简单的例子中,我们构造了一个TThread的子类TQueryThread,用于在后台执行数据库查

询。在该类的Create函数中,传递了两个参数Suspended和Query,其中Suspended用于控制线程的运行,如果

Suspend为真,TQueryThread类的线程在建立后将立即被悬挂,一直到运行了Resume方法,该线程才会继续执

行,Query参数用于接受一个已经存在的Query控件(在窗体中真正的Query控件)而使它在多线程的情况下运

行。Execute是最重要的过程,它是类TQueryThread的执行部分,所有需要在这个多线程类中运行的语句都必

须写在这个过程里。

实际上构造自己的多线程类时,并不需要输入所有的这些代码,选择DELPHI的File菜单下的new选项,再

选“TThreadObject”项目,DELPHI就会为你构造基本的程序模块。然后我们可以根据需要再做相应的修改。

进程的执行:

假设我们已经建立了一个窗体FORM1,窗体中有我们将要使用的查询控件Query1。那么我们在该单元的

USES部分加入上面写的QuerThrd单元。

procedureTForm1.Button1Click(Sender:TObject);

begin

{建立一个运行的进程}

TQueryThread.Create(False,Query1);

end;

如果这个过程被执行,那么窗体中的查询控件Query1就会自动在多线程的环境下运行查询。注意

TQueryThread类中只有Create而没有Free,动态建立类以后又忘记删除是我们常犯的错误之一,不过在这里

由于我们指定了FreeOnTerminate(运行完即删除)为真,所以当Execute里的语句执行完后,TQueryThread

类占据的内存控件将被自动释放。

然而还有一个问题值得我们注意,由于同一时刻可以有多个线程同时运行,那么我们还必须解决好同步

的问题,如果几个多线程程序之间没有任何关联,那么它们之间也不会有任何冲突。但实际上,可能同时运

行几个多线程的数据库应用程序,由于需要共享相同的数据库资源,我们还需要为Query1增加一个Tsession

控件。

其实,虽然我们也许没有亲自使用过Session控件,但实际上,在所有的数据库访问时DELPHI都会自动建

立一个临时的Session控件,使用完后又动态地删除掉它。在平常的数据库编程时,用不着我们亲自来操作,

但在数据库多线程执行的情况下,为了不相互冲突,我们必须为每个数据库访问都定制自己的Session控件。

这个步骤非常简单,我们只需要在窗体中增加一个Session控件,然后给它的属性“Sessionname”写一个任

意的名字,并再在Query1的“Sessionname”中写一个相同的名字。这样我们的数据库程序就安全了。

另一类需要解决同步问题的是那些对VCL资源进行操作的程序,这类的程序非常多,好在解决的方法也非

常简单。

我们可以看下面这样一个程序

unitBncThrd;

interface

uses

WinProcs,Classes,Graphics,ExtCtrls;

type

TBounceThreadΚclass(TThread)

private

FShape:TShape;

FXSpeed:Integer;

FYSpeed:Integer;

procedureMoveShape;

protected

procedureExecute;ov

  • 上一篇资讯: Delphi中的INI文件编程
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号