DELPHI下的多线程程序设计.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DELPHI下的多线程程序设计 我们知道, win95 或 winNT 都是“多线程 ”的操作系统,在 DELPHI 2.0 中,我们可以充 分利用这一特性,编写出 “多线程 ”的应用程序。 对以往在DOS或16位windows下写程序的人来说, 多线程”仍然是陌生的,但如 同以前我们从DOS下的单任务过渡到 windows3 . 1下的多任务,如今我们又必须过渡到 “多线程”领域,毕竟计算机时代是在不断发展的。不过,幸运的是,在 DELPHI2 .0 下 进行多线程程序设计并不需要我们去学习庞大的 WIN32API 函数,我们可以利用 DELPHI 下标准的多线程类 TThread 来完成我们的工作。 TThread是一个abstract (抽象)类,也就是说,并不需要根据 TThread来声明变量 (而且根据 TThread 声明的变量也是完全无用) ,我们要做的是把 TThread 作为基类,用 继承的形式来生成子类。实际上,根据 TThread 来写多线程应用程序是非常容易的。 下面就是一个基本的继承 TThread 生成的多线程类。 QuerThrd.Pas unitQuerThrd ; interface uses Classes, DBTables; type TQueryThreadK class (TThread) private fQuery:tQuery; protected proced u reExecute; override; public constructorCreate( Suspended: Boolean;Query:TQuery); end; implementation constructor TQueryThread.Create(Suspended:Boolean;Query:TQuery); begin inheritedCreate ( Suspended); fQuery : K Query; Free On Term in ate: K True end; procedureTQueryThread. Execute; begin fQuery.Open; en d; en d. 在上面这个简单的例子中,我们构造了一个 TThread的子类TQuery Thread,用于 在后台执行数据库查询。在该类的 Create函数中,传递了两个参数 Suspended和Query, 其中Suspended用于控制线程的运行,如果 Suspend为真,TQueryThread类的线程在建 立后将立即被悬挂,一直到运行了 Resume方法,该线程才会继续执行, Query参数用于 接受一个已经存在的 Query控件(在窗体中真正的 Query控件)而使它在多线程的情况 下运行。Execute是最重要的过程,它是类 TQueryThread的执行部分,所有需要在这个 多线程类中运行的语句都必须写在这个过程里。 实际上构造自己的多线程类时, 并不需要输入所有的这些代码, 选择DELPHI的File 菜单下的new选项,再选“TThreadObject项目,DELPHI就会为你构造基本的程序模块。 然后我们可以根据需要再做相应的修改。 进程的执行: 假设我们已经建立了一个窗体 F0RM1,窗体中有我们将要使用的查询控件 Query1。 那么我们在该单元的 USES部分加入上面写的QuerThrd单元。 procedureTForm1 . Button1Click ( Sender: TObject); begi n {建立一个运行的进程} TQueryThread . Create (False, Query1); en d; 如果这个过程被执行,那么窗体中的查询控件 Query1就会自动在多线程的环境下运 行查询。注意TQueryThread类中只有Create而没有Free,动态建立类以后又忘记删除是 我们常犯的错误之一,不过在这里由于我们指定了 FreeOnTerminate (运行完即删除)为 真,所以当Execute里的语句执行完后,TQueryThread类占据的内存控件将被自动释放。 然而还有一个问题值得我们注意,由于同一时刻可以有多个线程同时运行,那么我 们还必须解决好同步的问题,如果几个多线程程序之间没有任何关联,那么它们之间也 不会有任何冲突。但实际上,可能同时运行几个多线程的数据库应用程序,由于需要共 享相同的数据库资源,我们还需要为 Query1增加一个Tsession控件。 其实,虽然我们也许没有亲自使用过 Session控件,但实际上,在所有的数据库访问 时DELPHI都会自动建立一个临时的 Session控件,使用完后又动态地删除掉它。 在平常 的数据库编程时,

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档