• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi讲的比较详细的多线程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

在了解多线程之前我们先了解一下进程和线程的关系

一个程序至少有一个主进程,一个进程至少有一个线程。

为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:http://www.cr173.com/html/16747_1.html

主线程又程为UI线程。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。

多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以仅仅是看上去会一些,明白了2+2的时候,其实我还不知道1+1。

开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解.


先试试这个:

  1.  
    procedure TForm1.Button1Click(Sender: TObject); 
  2.  
    var 
  3.  
      i: Integer; 
  4.  
    begin 
  5.  
      for i := 0 to 500000 do 
  6.  
      begin 
  7.  
        Canvas.TextOut(1010, IntToStr(i)); 
  8.  
      end
  9.  
    end

上面程序运行时, 我们的窗体基本是 "死" 的, 可以在你在程序运行期间拖动窗体试试...

Delphi 为我们提供了一个简单的办法(Application.ProcessMessages)来解决这个问题:
  1.  
    procedure TForm1.Button1Click(Sender: TObject); 
  2.  
    var 
  3.  
      i: Integer; 
  4.  
    begin 
  5.  
      for i := 0 to 500000 do 
  6.  
      begin 
  7.  
        Canvas.TextOut(1010, IntToStr(i)); 
  8.  
        Application.ProcessMessages; 
  9.  
      end
  10.  
    end

这个 Application.ProcessMessages; 一般用在比较费时的循环中, 它会检查并先处理消息队列中的其他消息.

但这算不上多线程, 譬如: 运行中你拖动窗体, 循环会暂停下来...

在使用多线程以前, 让我们先简单修改一下程序:
  1.  
    function MyFun: Integer; 
  2.  
    var 
  3.  
      i: Integer; 
  4.  
    begin 
  5.  
      for i := 0 to 500000 do 
  6.  
      begin 
  7.  
        Form1.Canvas.Lock; 
  8.  
        Form1.Canvas.TextOut(1010, IntToStr(i)); 
  9.  
        Form1.Canvas.Unlock; 
  10.  
      end
  11.  
      Result := 0
  12.  
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLABdatenum日期转换为Python日期发布时间:2022-07-18
下一篇:
Matlab实现movieLens转矩阵发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap