技术开发 频道

基于Windows CE的Mutex简单探讨和应用

  【IT168 专稿】前些天,用VS.NET2008开发一个PDA的项目;这个PDA是基于Windows CE的操作系统;用户有个需求,当这个应用程序一旦开起来,如果他想再点击运行,就提醒他:该程序已经运行;于是本人就建议小兄弟用Mutex类实现,最后他告诉我不可以;用Mutex类去开发一般Windows 程式,会比较容易,但如果拿他去开发Windows CE的程式,就有些说词,本文就是基于这样的背景下展开的.

  Mutex单词是“互斥”的意思; 同性相斥,异性相吸(人类活动的多样性,早已打破这一铁定的规律,动物界应该还严格遵守这一约定…呵呵,题外话.);

  Mutex更详细的解释,就是mutual exclusion 对象的缩写;用一句计算机的行话来说,一个互斥体就是一个程序对象,它允许多个线程来共享相同的资源;例如对文件的访问,但并不允许同时访问;这在我们使用的过程中能体会到,比如你打开一个文件,你接着再打开一次的时候,它就提醒你,当前的应用程序已经打开,你是否继续等..;当一个程序运行起来的时候,这个互斥体就产生了,且带有唯一的名字;学过操作系统的,都会有这个概念叫互斥;上学的时候,老师举了个很好例子来说明,比如你在火车上,那个厕所就是很好的互斥体;你要用这个厕所,别人就不能用,直到别人使用完,你才能用,即使你闹肚子也不行,^-^..; 你打电话有时候也会遇到这种情况;如:该电话正在忙,请稍候再拨!

  闲话少说,那么在大家编程的时候,有时候用户有这样的需求,这个程序只要开启一次,如果有人想继续开启,就提醒他,这个应用程序正在运行;

  对Visual Studio.NET开发人员来讲,如果设计一个传统的Window Form程序好像就比较简单,用Mutex很容易解决这样的需求; 如下代码:

  [VB.NET]

  '引用Mutex的类

  
Imports System.Threading

  
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  
'定义Mutex的类

  
Dim objMutex As Mutex

  
'得到应用程序的名称

  
Dim AppName As String = Assembly.GetExecutingAssembly().GetName().Name

  
'用这个应用程序的名字,去实例化这个Mutex

  objMutex
= New Mutex(False, AppName)

  
'判断是否有相同的应用程序在运行;

  
If objMutex.WaitOne(0, False) = False Then

  objMutex.Close()

  objMutex
= Nothing

  MessageBox.Show(
"这个程序正在运行!")

  ‘或者为了更通俗些,也可写成下面的代码;

  MessageBox.Show(
"该电话正在忙,请稍候再拨!")

  Close()
'关闭这个应用程序

  
Exit Sub

  
End If

  
End Sub

   这里强调下面的代码:

  objMutex = New Mutex(False, AppName)

   这里的AppName就很重要,如果你忽略这样的参数,你的上述的函数就失去了原有的意义;

0
相关文章