- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
delphi之多线程编程【DOC精选】
delphi之多线程编程(一)本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅。所有代码均亲自测试 delphi7下测试有效。图片均为自己制作。多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以仅仅是看上去会一些,明白了2+2的时候,其实我还不知道1+1。开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解.先试试这个:procedure?TForm1.Button1Click(Sender:?TObject);?var???i:?Integer;?begin???for?i?:=?0?to?500000?do???begin?????Canvas.TextOut(10,?10,?IntToStr(i));???end;?end;?上面程序运行时, 我们的窗体基本是 死 的, 可以在你在程序运行期间拖动窗体试试...Delphi 为我们提供了一个简单的办法(Application.ProcessMessages)来解决这个问题:procedure?TForm1.Button1Click(Sender:?TObject);?var???i:?Integer;?begin???for?i?:=?0?to?500000?do???begin?????Canvas.TextOut(10,?10,?IntToStr(i));?????Application.ProcessMessages;???end;?end;?这个 Application.ProcessMessages; 一般用在比较费时的循环中, 它会检查并先处理消息队列中的其他消息.但这算不上多线程, 譬如: 运行中你拖动窗体, 循环会暂停下来...在使用多线程以前, 让我们先简单修改一下程序:function?MyFun:?Integer;?var???i:?Integer;?begin???for?i?:=?0?to?500000?do???begin?????Form1.Canvas.Lock;?????Form1.Canvas.TextOut(10,?10,?IntToStr(i));?????Form1.Canvas.Unlock;???end;???Result?:=?0;?end;??procedure?TForm1.Button1Click(Sender:?TObject);?begin???MyFun;?end;?细数上面程序的变化:1、首先这还不是多线程的, 也会让窗体假 死 一会;2、把执行代码写在了一个函数里, 但这个函数不属于 TForm1 的方法, 所以使用 Canvas 是必须冠以名称(Form1);3、既然是个函数, (不管是否必要)都应该有返回值;4、使用了 500001 次 Lock 和 Unlock.Canvas.Lock 好比在说: Canvas(绘图表面)正忙着呢, 其他想用 Canvas 的等会;Canvas.Unlock : 用完了, 解锁!在 Canvas 中使用 Lock 和 Unlock 是个好习惯, 在不使用多线程的情况下这无所谓, 但保不准哪天程序会扩展为多线程的; 我们现在学习多线程, 当然应该用.在 Delphi 中使用多线程有两种方法: 调用 API、使用 TThread 类; 使用 API 的代码更简单.function?MyFun(p:?Pointer):?Integer;?stdcall;?var???i:?Integer;?begin???for?i?:=?0?to?500000?do???begin?????Form1.Canvas.Lock;?????Form1.Canvas.TextOut(10,?10,?IntToStr(i));?????Form1.Canvas.Unlock;???end;???Result?:=?0;?end;??procedure?TForm1.Button1Click(Sender:?TObject);?var???ID:?THandle;?begin???CreateThread(nil,?0,?@MyFun,?nil,?0,?ID);?end;?代码分析:CreateThread 一个线程后, 算上原来的主线程, 这样程序就有两个线程、是标准的多线程了;CreateThread 第三个参数是函数指针, 新线程建立后将立即执行该函数, 函数执行完毕, 系统将销毁此线程从而结束多线程的故事.CreateThread 要使用的函数是系统级别的, 不能是某个类(譬如: TForm1)的方法, 并且有严格的格式(参数、返回值)要求, 不管你暂时是不是需要都必须按格式来;因为是系统级调用, 还要缀上 stdcall, stdca
您可能关注的文档
- DC- 人力资源控制程序【DOC精选】.doc
- DC-DC电源变换器的设计与制作【DOC精选】.doc
- Debate Aging population【DOC精选】.doc
- debug card【DOC精选】.doc
- debian bind9配置【DOC精选】.doc
- DEBUG命令 汇编【DOC精选】.doc
- DEBUG命令介绍【DOC精选】.doc
- debug命令解析【DOC精选】.doc
- debug命令解释【DOC精选】.doc
- DEBUG命令使用及寻址方式使用【DOC精选】.doc
- 人工智能视角下区域教育评价改革利益相关者协调研究——以均衡发展为目标的应用实践教学研究课题报告.docx
- 《金融科技在消费金融领域的应用:基于金融科技伦理的监管策略》教学研究课题报告.docx
- 智能法律服务2025年法律科技人才培养需求分析报告.docx
- 《智能安防视频监控中的行为分析技术在智能工厂安全监控中的应用》教学研究课题报告.docx
- 智能电网背景下2025年数据中心绿色认证体系构建与优化.docx
- 智能电网背景下2025年储能技术产业政策与市场分析报告.docx
- 智能网联汽车2025年智能网联汽车车联网信息安全与监管报告.docx
- 智能监管2025剧本杀行业,内容技术革新分析报告.docx
- 智能穿戴设备用户付费意愿与市场前景研究报告.docx
- 初中化学家庭实验课程资源开发:以实验探究能力培养为核心教学研究课题报告.docx
文档评论(0)