使用互斥对象让程序只运行一次计算机等级考试

文章作者 100test 发表时间 2010:01:01 09:31:00
来源 100Test.Com百考试题网


  “怎么让我的程序在运行时不能重复打开?”经常在论坛上看到有朋友问这方面的问题。本文将比较详细的说明这一问题,并给出一个较为完善的解决方案。
  尽管这已经不是一个新问题了,但这里还是简要的说明一下这种技术:这的确是一个相当有用的技术,可能你经常会注意到相当多的程序在运行之后当你再次点击运行时,它只是会回到原来的窗口,而不会运行两个程序。就如同你在运行delphi时,在外部点开另一个工程文件时,delphi只是会简单的将你的当前工程置换而不是运行两个delphi。这样的好处是显而易见的:你不必担心你的程序在某些情况下被别的软件恶意运行多次而吃光内存造成当机。下面我们做进一部的说明:
  熟悉win32编程的朋友(特别是多线程编程),相信对互斥对象已经相当熟悉了,它常被用做线程间同步的技术手段。这里我们使用它来防止程序重复运行。我们只是简要的提一下互斥对象,并不做深入研究:互斥对象把第一次建立它的程序作为主程序,这样我们只用检测互斥对象是否已经有主程序就判断程序是否已经运行过,这里需要涉及到一个api函数:WaitForSingleObject该函数的第一个参数为用以检测的互斥对象,第2个参数的表示函数返回结果前的滞留时间,如果改函数返回wait_TimeOut就表明互斥对象已经有了一个主程序。修改了的工程文件代码如下:(注意:以下的代码都出现在工程文件中,而不是单元文件中,并且这里都在最简单的delphi默认建立的工程基础上修改)
  var
  myMutex:HWND.
  begin
  myMutex:=CreateMutex(nil,false,\hkOneCopy\).// CreateMutex建立互斥对象,并且给互斥对象起一个唯一的名字。
  if WaitForSingleObject(myMutex,0)

相关文章


打造Delphi中字符串的replace函数计算机等级考试
StatusBar有多个子栏时确定鼠标双击哪一个子栏计算机等级考试
全国计算机等级考试二级笔试样卷Delphi语言程序设计计算机等级考试
使用内存映象实现进程间全局变量计算机等级考试
使用互斥对象让程序只运行一次计算机等级考试
TListView组件显示文件夹中的文件计算机等级考试
tlistview使用:拖放操作计算机等级考试
在Delphi中自己建立交叉表计算机等级考试
Delphi代码创建形式规范计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛