DELPHI下的多线程程序设计

DELPHI下的多线程程序设计,第1张

我们知道 win 或winNT都是 多线程 的 *** 作系统 在DELPHI . 中 我们可以充分利用这一特性 编写出 多线程 的应用程序 对以往在DOS或 位windows下写程序的人来说 多线程 仍然是陌生的 但如同以前我们从DOS下的单任务过渡到windows . 下的多任务 如今我们又必须过渡到 多线程 领域 毕竟计算机时代是在不断发展的 不过 幸运的是 在DELPHI . 下进行多线程程序设计并不需要我们去学习庞大的WIN API函数 我们可以利用DELPHI下标准的多线程类TThread来完成我们的工作  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 Query 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就会为你构造基本的程序模块 然后我们可以根据需要再做相应的修改 进程的执行 假设我们已经建立了一个窗体FORM 窗体中有我们将要使用的查询控件Query 那么我们在该单元的USES部分加入上面写的QuerThrd单元 procedureTForm .Button Click(Sender TObject) begin {建立一个运行的进程} TQueryThread.Create(False Query ) end 如果这个过程被执行 那么窗体中的查询控件Query 就会自动在多线程的环境下运行查询 注意TQueryThread类中只有Create而没有Free 动态建立类以后又忘记删除是我们常犯的错误之一 不过在这里由于我们指定了FreeOnTerminate(运行完即删除)为真 所以当Execute里的语句执行完后 TQueryThread类占据的内存控件将被自动释放 然而还有一个问题值得我们注意 由于同一时刻可以有多个线程同时运行 那么我们还必须解决好同步的问题 如果几个多线程程序之间没有任何关联 那么它们之间也不会有任何冲突 但实际上 可能同时运行几个多线程的数据库应用程序 由于需要共享相同的数据库资源 我们还需要为Query 增加一个Tsession控件 其实 虽然我们也许没有亲自使用过Session控件 但实际上 在所有的数据库访问时DELPHI都会自动建立一个临时的Session控件 使用完后又动态地删除掉它 在平常的数据库编程时 用不着我们亲自来 *** 作 但在数据库多线程执行的情况下 为了不相互冲突 我们必须为每个数据库访问都定制自己的Session控件 这个步骤非常简单 我们只需要在窗体中增加一个Session控件 然后给它的属性 Sessionname 写一个任意的名字 并再在Query 的 Sessionname 中写一个相同的名字 这样我们的数据库程序就安全了 另一类需要解决同步问题的是那些对VCL资源进行 *** 作的程序 这类的程序非常多 好在解决的方法也非常简单 我们可以看下面这样一个程序 unitBncThrd interface uses WinProcs Classes Graphics ExtCtrls type TBounceThreadΚclass(TThread) private FShape TShape FXSpeed Integer FYSpeed Integer procedureMoveShape protected procedureExecute override public constructorCreate(Suspended Boolean Shape TShape XSpeed YSpeed Integer) propertyShape TShapereadFShape end implementation procedureTBouad.MoveShape var MaxHeight MaxWidth Integer begin withFShapedo begin Left ΚLeft+FXSpeed Top ΚTop+FYSpeed if(LeftΙ )or (Left+WidthΛParent.Width)then FXSpeed ΚFXSpeed*- if(TopΙ )or (Top+HeightΛParent.Height)then FYSpeed ΚFYSpeed*- end end procedureTBounceThread.Execute begin WhilenotTerminateddo begin Synchronize(MoveShape) end end constructorTBounceThread.Create(Suspended Boolean Shape TShape XSpeed YSpeed Integer) begin inheritedCreate(Suspended) FShape ΚShape FXSpeed ΚXSpeed {X轴走向的速度} FYSpeed ΚYSpeed {Y轴走向的速度} FreeOnTerminate ΚTrue end end. 这是一个多线程的碰碰球游戏 你可以有多个不同的球 它们分属不同的线程 各自独立的在屏幕上碰撞 显然 由于多个球运行的显示会同时 *** 作VCL资源 为了安全 我们在Execute过程中的执行部分加入了Synchronize(MoveShape)来调用MoveShape过程 实际上 在任何需要 *** 作VCL资源的地方 例如窗体 位图 都应加入Synchronize调用 执行时我们可以新建一个程序 然后在USES部分加入以上的BncThrd单元 再在它的窗体FORM 上加入两个Shape控件Shape 和Shape Shape 可以是一个矩形而Shape 是一个圆 加入以下的代码就可以让矩形和圆动起来 procedureTForm .Button Click(Sender TObject) begin TBounceThread.Create(False Shape ) TBounceThread.Create(False Shape ) end lishixinzhi/Article/program/Delphi/201311/25059

其他语言

用于开发数据库应用程序的语言中 还可以使用目前数常见的 面向对象程序设计 (OOP)语言 如C++ Objact Pascal等 OOP代表了一种完全不同的程序设计方法 在这种程序设计方法中 活动被定义为在 对象 上发生的 *** 作 而不是作为一系列过程来定义的 在数据库应用程序中使用OOP语言的情况正在不断增加

开发数据库应用程序使用的另一种语言是 宏 语言 宏语言不是一种完全的程序设计语言 它实际上是一个用户手工输入的表 这个表被输入到应用程序中 以便自动执行一定的任务 对于某个特定应用的高级语言 宏语言通常可以在低档DBMS软件中或数据库服务器的前端中找到

最后 还有一种 Query By Example (QBE 范例查询)语言 严格地讲QBE不是一种语言 它是面向用户提供了一个或多个空表的界面 这些空表对应于数据库中的表 用户可以通过键盘选择需要查询的列 并在适当的列中填入条件从而定义查询的检索条件 然后DBMS就把QBE转换成相应的动作 以完成用户要求的查询任务

Delphi的数据库特性及功能简介

直到目前为止 计算机软件的开发分为两个不同的体系 其中一个体系是使用传统的程序设计语言(如Pascal Basic和C等)开发数值控制 数值运算等软件 围绕它们的重点是算术 数据结构以及近年产生的面向对象技术 另一个体系则是通用的数据库管理软件领域(数据库应用程序的开发) 这两个体系的发展都极为迅猛 但是二者并没出现混合渗透迹象 如果使用数据库语言进行传统的算术编程 虽然也能完成相应的功能 但是其编程过程可能极为复杂 如果使用传统的编程语言进行数据库编程 通过调用专用的数据库应用程序接口函数和过程 利用这些函数和过程提供的功能 可能也能做得比较完善 但这做起来大多是极其困难的 而Delphi结合了两个体系的优点 它结合了传统的编程语言Object Pascal和数据库语言的强大功能 它即可以用于传统的算术编程又可以用于数据库编程 特别是Delphi具有强大的数据库功能 利用Delphi的数据库工具 我们根本不需要编写任何Object Pascal代码便可以创建一个简单的数据库应用

Delphi是Borland公司于 年底发布的用于开发数据库应用程序的工具 它是面向对象的 它是目前开发客户/服务器数据库应用程序的强有力的工具 Delphi在Window 以上版本的系统环境下运行 目前具有两个版本 Delphi的标准版本和客户/服务器版本 标准版本包含一个Borland Database Engine的局部拷贝 它允许用户创建能访问dBASE Paradox和Local InterBase 服务器的数据库应用 它还支持具有 ODBC 接口的数据库 Delphi的客户/服务器版本包括Borland SQL Link 它能直接访问 ORACLE SyBase 和Microsoft SQL Server Informix以及InterBase数据库服务器

Delphi可以访问多种数据库管理系统的数据库 凭借窗体(Forms)和报表(Reports) BDE(Borland Database Engine)可以访问诸如Paradox dBASE 本地InterBase 服务器的数据库 也可以访问远程数据库服务器上的数据库(如ORACLE SyBase Informix等客户/服务器数据库中的数据库) 或任何经ODBC(Open Database Connecticity) 可访问的数据库管理系统中的数据库

Delphi的数据库特性

跟其他的应用程序一样 Delphi提供了许多部件以方便地创建数据库应用程序 数据库对象的数据成员既可在设计阶段设置 也可在运行阶段通过程序代码进行设置 Delphi的部件板上提供了两页数据库应用程序开发中所要使用的部件

数据访问页(Data Access Page)上的部件用于直接访问数据库中的数据库表

数据控制页(Data Control Page)上的部件用来与用户交互 显示 修改数据库中的数据

数据库应用程序首先是利用Delphi提供的数据库部件与BDE建立联系 然后再通过BDE与数据库联系 下图阐述了Delphi的数据库工具和部件 Delphi数据库应用程序与BDE 数据源之间的关系

下表概括了Delphi的数据库特性

表 Delphi的数据库特性

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

工具和部件   主 要 用 途

──────────────────────────────────────

Data Access Components  访问数据库 数据库表 存贮过程等

──────────────────────────────────────

Data Control Components  与用户交互 提供显示 修改数据库中数据的界面

──────────────────────────────────────

Database Desktop(DBD)  建立 索引 查询数据库表以及访问 编辑来自各数据中的数据

──────────────────────────────────────

ReportSmith  建立 浏览和打印数据库表中的数据

──────────────────────────────────────

Borland Database Engine  数据库应用通过BDE访问dBASE Paradox数据库中的数据(BDE)  和本地InterBase数据库服务器中的数据

──────────────────────────────────────

BDE Configuration  建立和管理BDE与数据库建立连接时所使用的数据库的

Utility  别名

──────────────────────────────────────

Local InterBase Server  它是一个单用户 多例程的本地SQL数据库服务器 可在单机环境下用来开发或测试客户/服务器数据库应用程序 然后再将之扩展成一个访问远程数据库服务器如ORACLE SyBase Informix等

──────────────────────────────────────

InterBase SQL Link  连接Delphi数据库应用程序一本地InterBase服务器的驱动程序

Delphi上述这些特性使得我们创建数据库应用程序通过BDE能够很灵活地与 dBASE Paradox Local InterBase数据库服务器进行连接并可以方便地访问其中的数据 我们在创建一个简单的数据库应用时通过使用Delphi提供的上述工具和部件甚至可以不需编写任何程序

BDE被自动地包含在Delphi中 因此 我们在创建数据库应用程序时 不必关心BDE的有关内容 Delphi的安装程序自动为Paradox dBASE和本地InterBaseServer 安装相应的驱动程序 并建立了有关的配置 DBE Configuration Utility 可以建立应用程序与数据库的连接信息 还可以为数据库设置别名

下表列出了Delphi开发Client/Server应用程序的有关特性 这些特性扩展了 Delphi访问远程数据库的功能 如SQL数据库服务器(ORACLE SyBase Informix Microsoft SQL Server InterBase)

表 Delphi Client/server数据库特性

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

工 具   主 要 用 途

─────────────────────────────────

SQL Drivers  SQL Drivers中的SQL link和ReportSmith为Delphi数据库应用程序提供了访问远程SQL服务器的驱动程序 如访问ORACLE SyBase Microsoft SQL server Informix Intermix

   ─────────────────────────────────

lishixinzhi/Article/program/Delphi/201311/25183


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/10947422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存