wince程序防止创建多个实例实现互斥作用

2014-09-17  来源:本站原创  分类:C 语言  人气:1 

什么时候用的互斥?当你的程序只允许同时打开一个的时候,就可以通过互斥来实现,下面说的互斥,主要是针对防止程序创建多个实例这种情况来实现的

流程:
1、在程序初始化的时候创建互斥量
2、检测互斥量返回的错误代码,看是否已存在这个互斥量
3、若已存在相同的互斥量,则释放创建的互斥句柄,并复位互斥量,然后,退出该程序

具体代码如下:

//创建互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, _T("D3GPhoneDlg"));
// 检查错误代码
if (GetLastError() == ERROR_ALREADY_EXISTS){
// 如果已有互斥量存在则释放句柄并复位互斥量
CloseHandle(m_hMutex);
m_hMutex = NULL;
::PostMessageW(HWND_BROADCAST, WM_D3GPHONEDLG_MSG, 1, 2);// 通知已打开的程序,激活窗口
// 程序退出
CDialog::OnCancel();
}
// *** 【EOF】防止程序创建多个实例 ***

这段代码在wince 的MFC程序中测试通过,放到程序的OnInitDialog()函数中。

大家在测试的时候,可以先把激活窗口的那句注释掉

相关文章
  • wince程序防止创建多个实例实现互斥作用 2014-09-17

    什么时候用的互斥?当你的程序只允许同时打开一个的时候,就可以通过互斥来实现,下面说的互斥,主要是针对防止程序创建多个实例这种情况来实现的 流程: 1.在程序初始化的时候创建互斥量 2.检测互斥量返回的错误代码,看是否已存在这个互斥量 3.若已存在相同的互斥量,则释放创建的互斥句柄,并复位互斥量,然后,退出该程序 具体代码如下: //创建互斥量 HANDLE m_hMutex = CreateMutex(NULL, FALSE, _T("D3GPhoneDlg")); // 检查错误代码

  • Android创建Menu菜单实例 2014-02-28

    这篇文章主要介绍了Android创建Menu菜单实例,讲述了Android菜单项的创建方法,在Android应用程序开发中非常具有实用价值,需要的朋友可以参考下 本文实例讲述了Android创建Menu菜单的方法.分享给大家供大家参考.具体方法如下: package com.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.provi

  • ASP.NET Web API教程 创建Admin控制器实例分享 2014-06-26

    在本文中我们要添加一个对产品支持CRUD(创建.读取.更新和删除)操作的Web API控制器,需要的朋友可以参考下 In this section, we'll add a Web API controller that supports CRUD (create, read, update, and delete) operations on products. The controller will use Entity Framework to communicate with the d

  • C#动态执行字符串(动态创建代码)的实例代码 2014-07-17

    在编写C#程序的时候,有时我们需要动态生成一些代码并执行.然而C#不像JavaScript有一个Eval函数,可以动态的执行代码.所有这些功能都要我们自己去完成 using System; using System.Data; using System.Configuration; using System.Text; using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; namespace

  • C语言创建windows窗口实例 2014-08-29

    这篇文章主要介绍了C语言创建windows窗口实例,本文直接给出实现代码,同时讲解了编码的步骤,需要的朋友可以参考下 耐得住寂寞,禁得起诱惑,这就是程序人生 步骤: 1.在WinMain中定义各种变量 2.注册窗口类RegisterClass 3.创建窗口CreateWindow 4.显示窗口和更新窗口 ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; 5.消息循环 复制代码 代码如下: while (GetMessage (&msg, NU

  • asp.net StreamReader 创建文件的实例代码 2015-03-08

    这篇文章介绍了asp.net StreamReader 创建文件的实例代码,有需要的朋友可以参考一下 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI

  • 解决C#程序只允许运行一个实例的几种方法详解 2015-04-14

    本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运行. 要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现: 方法一:使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例. 把program.cs文件里的Main()函数改为如下代码: using System; using System.Windows.Forms; using System.Runtime.InteropSe

  • Java应用程序中创建图像 2013-11-02

    合成图像 您不必从文件中读取所有的图像 - 您可以创建自己的图像.要创建自己的图像,最灵活的方法是用一个 BufferedImage 对象,它是 Image 类的一个子类,它把图像数据存储在一个可以被访问的缓冲区中.它还支持各种存储像素数据的方法:使用或不使用 alpha 通道.不同种类的颜色模型以及颜色组件的各种精确度.ColorModel 类提供一种灵活的方法定义各种颜色模型,以和 BufferedImage 对象一起使用.为了理解颜色模型工作的基本知识,我们将只使用一个缺省的颜色模型,其颜

  • C#类的创建与初始化实例解析 2014-02-01

    这篇文章主要介绍了C#类的创建与初始化实例解析,有助于初学者较为直观的理解C#的类,需要的朋友可以参考下 本文以一个实例简单实现了类的创建与初始化,实现代码如下所示: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C_program_test { class Person { public string Name; //因为Name没有赋值,而它是st

  • Android中使用IntentService创建后台服务实例 2014-03-10

    这篇文章主要介绍了Android中使用IntentService创建后台服务实例,IntentService提供了在单个后台线程运行操作的简单结构,需要的朋友可以参考下 IntentService提供了在单个后台线程运行操作的简单结构.这允许它操作耗时操作,而不影响UI响应.同样,IntentService也不影响UI生命周期事件,所以,它在某些可能关闭AsyncTask的情况下,仍会继续运行(实测在Activity的onDestory里写AsyncTask无法运行). IntentServic

  • asp中使用redim.preserve创建动态数组实例 2014-05-31

    这篇文章主要介绍了asp中使用redim.preserve创建动态数组实例,本文还给出了ASP中其它的数组操作例子,需要的朋友可以参考下 asp中REDIM的功能是动态定义数组长度 动态数组里面的一个语句,只能出现在过程里面,可以多次使用.可以改变数组大小,和维数. 格式: REDIM [Preserve] 数组名(下标1[下标2....]) Preserve 保留动态数组的内容(不用的话,每次执行REDIM语句,当前存储的语句会全部丢失) 例如: Dim DynArray() '定义数组Dyn

  • oracle存储过程创建表分区实例 2014-11-11

    二种oracle存储过程创建表分区实例 用存储过程创建数据表:创建时注意必须添加authid current_user,如果创建的表已存在,存储过程继续执行,但如不不加此关键语句,存储过程将出现异常, 这个语句相当于赋权限. 例1 创建语句如下: create or replace procedure sp_create_mnl(i_id varchar2) authid current_user as /********************************* 名称:sp_creat

  • Android中创建快捷方式代码实例 2015-02-04

    这篇文章主要介绍了Android中创建快捷方式代码实例,本文分为三个步骤实现,并分别给出对应实现代码,需要的朋友可以参考下 1.添加权限(必须) <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 2.添加快捷键 复制代码 代码如下: public static void setupShortcut(Activity activity) { Intent sh

  • ASP.NET实现二维码(QRCode)的创建和读取实例 2015-03-20

    这篇文章主要介绍了ASP.NET实现二维码(QRCode)的创建和读取实例,分析了二维码的实现原理与完整的代码实现步骤,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了ASP.NET实现二维码(QRCode)的创建和读取方法.分享给大家供大家参考.具体分析如下: 概述: QR二维码比其他二维码相比,具有识读速度快.数据密度大.占用空间小的优势.QR码的三个角上有三个寻象图形,使用CCD识读设备来探测码的位置.大小.倾斜角度.并加以解码,实现360读高速识读.每秒可以识读30个含有100

  • win7安装系统出现"安装程序无法创建新的系统分区,也无法定位现有的系统分区"解决方法 2012-09-11

    原来服务器上的系统是debian的系统,现在需要在原系统和机器不动的基础上在这台服务器上安装一个win7系统,在安装过程中出现了标题中所说的问题,上网搜索了一下,发现最有效的解决办法就是修改bios中的磁盘的启动项: 由于原来的系统盘插在第一个sata口,应该是占据着磁盘0,那么在热插拔的机器上插入的一块新的硬盘应该是占据着磁盘1 而实际情况是在开机进行磁盘选择启动时 原来的debian系统盘是占据这第一启动项,后插入的硬盘占据着第二启动项,在进入到win7的安装程序的时候,会发现,后插入的那个

  • 如何打开一个程序或创建一个进程 2012-12-10

    打开一个程序和创建一个进程基本上是同一个意思.我们的工具箱里面有几个函数备选: system, WinExec, ShellExecuteEx, CreateProcess,他们有以下几点不同: - 只有system是同步操作. - 只有ShellExecuteEx, CreateProcess支持Unicode. - 是否打开新的Console窗口: 只在父子都是console下有效 system,WinExec总是不会打开.ShellExecuteEx,CreateProcess则可以控制是

  • C# 禁止应用程序多次启动的实例 2013-12-28

    经常我们会有这样的需求,只让应用程序运行一个实体,下面是实现的方法,有需要的朋友可以参考一下 通常我们的情况是,双击一个exe文件,就运行一个程序的实体,再双击一次这个exe文件,又运行这个应用程序的另一个实体.就拿QQ游戏来说吧,一台电脑上一般只能运行一个QQ游戏大厅(不过以前听说过有双开的外挂). 那我们的程序也能像QQ游戏那里禁止多次启动吗,答案是可以的,下面介绍下一个简单的实现方法,那就是Mutex(互斥). Mutex(mutual exclusion,互斥)是.Net Framewo

  • jQuery创建DOM元素实例解析 2013-10-05

    这篇文章主要介绍了jQuery创建DOM元素的方法,实例分析了jQuery使用$直接创建DOM元素的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jQuery创建DOM元素的使用技巧.分享给大家供大家参考.具体分析如下: 利用DOM方法创建元素节点,通常要将document.createElement().document.createTextNode().appendChild()配合使用,十分麻烦. 而jQuery使用$就可以直接创建DOM元素 var oNewP = $(

  • 5种PHP创建数组的实例代码分享 2013-11-21

    在本文将数组的各种创建方式用PHP实例代码的方式分享给大家,感兴趣的朋友可以了解下 看这篇文章之前相信大家都已经看过PHP中文手册关于数组这一节的讲解了,怎么样呢,看懂了多少?至少我第一次阅读文档时是一头雾水,也许是因为在翻译的不够通俗易懂吧^_^!!这里UncleToo根据自己的经验,将数组的各种创建方式用PHP实例代码的方式分享给大家,希望对大家有些帮助(当然,PHP文档还是要多看的) 1.使用array()创建数组 array()创建数组是我们在PHP开发过程中最常用到的一种方式,准确来说

  • GO语言文件的创建与打开实例分析 2014-12-16

    这篇文章主要介绍了GO语言文件的创建与打开的具体用法,实例分析了GO语言文件创建与打开操作中所涉及的函数具体用法,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例分析了GO语言文件的创建与打开用法.分享给大家供大家参考.具体分析如下: 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的.Golang 对文件的支持是在 os package 里,具体操作都封装在 type File struct {} 结构体中. 一.func Open(name string) (fil