- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
不错的delphi多线程编程教程
不錯的delphi多线程编程教程/luhui32599/blog/item/3097544f7970cfc7d0c86a7f.html
多线程编程(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)的方法, 并且有严格的格式(参数、返回值)要求, 不管你暂时是不是需要都必须按格式来
您可能关注的文档
- 九年级期末语文试卷定稿.doc
- 九年级模拟试卷.doc
- 上海宝宝可以玩的地方.doc
- 九年级段考试题.doc
- 上海展览会赞助方案.doc
- 上海太极拳培训学习.doc
- 上海市2011年度“科技创新行动计划”重大科技项目指南.doc
- 上海市中小学教育网.doc
- 九年级物理13、14章书后题详解.doc
- 上海市中小学见习教师规范培训手册导师评语(活页).doc
- 浅谈我国基层行政组织.pdf
- 解密03大气运动规律(分层训练)(原卷版)-2022年高考地理二轮复习讲义课件分层训练.docx
- 第二章世界的气候-2023-2024学年八年级地理上册单元速记巧练(北京中图版)3.docx
- 21共价键(好题精练)-2022-2023学年高二化学课件精讲及好题精练(人教版2019选择性必修2).docx
- 第27课社会主义建设在探索中曲折发展(原卷版).docx
- 黄金卷02-2023年中考道德与法治全真模拟卷(原卷版)2.docx
- 浅谈GIS的发展历程与趋势.pdf
- 浅谈如何开展许可证后续监管.pdf
- 研究所食堂承包合同7篇.docx
- 按揭房转让协议公证(协议文本)8篇.docx
文档评论(0)