网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
扩展Delphi的线程同步对象
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式
 begin

   Windows.ReleaseSemaphore(FHandle, ReleaseCount, PreviousCount);

  end;

  { TMutex }//互斥类的实现

  constructor TMutex.Create(MutexAttributes: PSecurityAttributes;

  InitialOwner: Boolean; const Name: string);

  //互斥类的构造函数

  begin

   FHandle := CreateMutex(MutexAttributes, InitialOwner, PChar(Name));

  end;

  procedure TMutex.Release;//互斥类的Release方法,用来释放对互斥对象的所有权

  begin

   Windows.ReleaseMutex(FHandle);

  end;

  end.

  二、信号灯对象与互斥对象的使用
  1. 信号灯对象

  信号灯对象维持一个从0到指定最大值之间的数。在其计数大于0时是有信号的,而在其计数为0时是无信号的。信号灯对象可用来限制对共享资源进行访问的线程数量,例如应用程序可使用信号灯对象来限制它建立的窗口数量。

  用类的Create方法来建立信号灯对象,在调用该方法时,可以指定对象的初始计数和最大计数。该方法有四个参数,依次为:安全属性、初始计数、最大计数和对象名字(以便别的进程的线程可打开指定名字的信号灯句柄)。如:

  Semaphore := TSemaphore.Create(nil,10,10,'''');

  一般把信号灯的初始计数设置成最大值。每次当信号灯有信号并等待函数返回时,信号灯计数就会减1,而通过调用对象的Release方法可按指定量增加信号灯的计数(默认为加1)。计数值越小就表明访问共享资源的程序越多。如:“Semaphore.Release(3, nil);”,其中第一个参数为增加的信号灯数量,第二个参数为执行该方法之前的信号灯数量。信号灯用法举例:

  if wrSignaled = Semaphore.WaitFor(10000) then//若信号灯是有信号的

  begin

   //打开另一个窗口

  end

   Semaphore.Release()

  在线程建立窗口之前,它使用WaitFor函数确定信号灯的当前计数是否允许建立新的窗口,等待时间设为10秒。

  2. 互斥对象

  Mutex对象的状态在它不被任何线程拥有时是有信号的,而当它被拥有时则是无信号的。Mutex对象很适合用来协调多个线程对共享资源的互斥访问(mutually exclusive)。例如,有几个线程共享对数据库的访问时,线程可以使用Mutex对象,一次只允许一个线程向数据库写入。

  用类的Create方法建立Mutex 对象,在建立Mutex 时,可以为对象起个名字,这样其他进程中的线程可以打开指定名字的Mutex对象句柄。例如:

  Mutex := TMutex.Create(nil, False, '''');

  在完成对共享资源的访问后,可以调用Release方法来释放Mutex,以便让别的线程能访问共享资源。如果线程终止而不释放Mutex,则认为该Mutex被废弃。

  互斥对象用法举例如下:

  if wrSignaled = Mutex.WaitFor(10000) then//若获得互斥对象的拥有权

   begin

   try

   //往数据库写入

   finally

  Mutex.Release;//释放对互斥对象的拥有权

   end;

   end;

  上述类代码在Windows 98,Delphi 5.0下调试通过。

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号