c++builder 如何实现一个应用程序只能打开一个进程
来源:互联网 发布:淘宝客服回复质量问题 编辑:程序博客网 时间:2024/05/16 07:31
c++builder 如何实现一个应用程序只能打开一个进程
这样做有什么好处呢!主要体现管理类型中录入、修改、删除、增加等操作中,当一个用户,操作了一半,由于别的事情忘记了自己已经打开了一个进程,此时又打开一个进程,做同样的事情。这样做是不是很危险。所以对于这样的情况,为了安全期间我们要在应用程序中作如下操作,这样你的应用程序将更完备。
if(OpenMutexA(MUTEX_ALL_ACCESS,True,"Mutex")==0){
CreateMutexA(NULL,True,"Mutex");
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
CloseHandle(OpenMutexA(MUTEX_ALL_ACCESS,True,"Mutex"));
}
CreateMutexA(NULL,True,"Mutex");
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
CloseHandle(OpenMutexA(MUTEX_ALL_ACCESS,True,"Mutex"));
}
上面代码的意思是,当互斥对象Mutex不存在时,将创建Mutex,否则结束。
上面代码中出现了三个陌生的数
OpenMutexA(MUTEX_ALL_ACCESS,True,"Mutex")、CreateMutexA(NULL,True,"Mutex")、CloseHandle(OpenMutexA(MUTEX_ALL_ACCESS,True,"Mutex"));
下面逐个解释:
OpenMutexA(MUTEX_ALL_ACCESS,True,"Mutex")
函数功能:为现有的一个已命名互斥体对象创建一个新句柄
函数原型: HANDLE OpenMutex(
DWORDdwDesiredAccess, // access
BOOLbInheritHandle, // inheritance option
LPCTSTRlpName // object name
);
参数:
dwDesiredAccess:
MUTEX_ALL_ACCESS 请求对互斥体的完全访问
MUTEX_MODIFY_STATE 允许使用 ReleaseMutex 函数
SYNCHRONIZE 允许互斥体对象同步使用
bInheritHandle : 如希望子进程能够继承句柄,则为TRUE
lpName :要打开对象的名字
返回值:如执行成功,返回对象的句柄;零表示失败。若想获得更多错误信息,请调用GetLastError函数。
备注:一旦不再需要,注意一定要用 CloseHandle 关闭互斥体句柄。如对象的所有句柄都已关闭,那么对象也会删除
速查:Windows NT/2000/XP:3.1以上版本;Windows 95/98/Me:95以上版本:
头文件:Windows.h ;库文件:Kernel32.lib。
DLL:Kernel32.dll.
CreateMutexA(NULL,True,"Mutex")
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpName
);
参数
lpMutexAttributes
指向一个SECURITY_ATTRIBUTES结构的指针,这个结构决定互斥体句柄是否被子进程继承。
bInitialOwner
布尔类型,决定互斥体的创建者是否为拥有者
lpName
指向互斥体名字字符串的指针。互斥体可以有名字。
互斥体的好处是可以在进程间共享
注解
一旦不再需要,注意必须用CloseHandle函数将互斥体句柄关闭。从属于它的所有句柄都被关闭后,就会删除对象
进程中止前,一定要释放互斥体,如不慎未采取这个措施,就会将这个互斥体标记为废弃,并自动释放所有权。共享这个互斥体的其他应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。这种状况是否会造成影响取决于涉及到的具体应用程序
- c++builder 如何实现一个应用程序只能打开一个进程
- 实现一个应用程序只能打开一个进程
- 实现设备只能被一个进程打开
- 限制应用程序只能打开一个
- 如何打开一个应用程序
- C#应用程序只能打开一次,应用程序只能打开一个,应用程序不能重复打开
- 在.net中 每次只能打开一个WinForm应用程序
- C#如何让同一个窗口只能打开一次和一个程序只能同时打开一个
- C#如何让同一个窗口只能打开一次和一个程序只能同时打开一个
- 应用程序打开一个应用程序
- 应用程序每次只能运行一个实例(C#)转
- 应用程序每次只能运行一个实例(C#)
- 应用程序每次只能运行一个实例(C#)
- C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
- 用C#检查一个进程是否打开
- C#_WinForm_打开一个进程、文件等.
- 判断只能启动一个应用程序
- 一次只能打开一个窗口
- 黑马程序员--异常处理(上)
- linux驱动常用头文件简要说明
- java.io.EOFException
- 黑马程序员--异常处理(下)
- Android layout_weight用法图解
- c++builder 如何实现一个应用程序只能打开一个进程
- 类大小及类成员分配
- 设置windows自动登录
- window server2008 配置FTP服务
- 多个UpdatePanel控件相互引发刷新的使用(转)
- 黑马程序员--Java集合
- ssd1963初始化程序
- UESTC 1846Angry Grammar Nazi 字符串
- jquery 对下拉框的操作