硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5364|回复: 0
收起左侧

c++builder 如何实现一个应用程序只能打开一个进程

[复制链接]

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2015-10-25 19:33:04 | 显示全部楼层 |阅读模式
这样做有什么好处呢!主要体现管理类型中录入、修改、删除、增加等操作中,当一个用户,操作了一半,由于别的事情忘记了自己已经打开了一个进程,此时又打开一个进程,做同样的事情。这样做是不是很危险。所以对于这样的情况,为了安全期间我们要在应用程序中作如下操作,这样你的应用程序将更完备。
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"));
}

上面代码的意思是,当互斥对象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, // accessBOOLbInheritHandle, // 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函数将互斥体句柄关闭。从属于它的所有句柄都被关闭后,就会删除对象
进程中止前,一定要释放互斥体,如不慎未采取这个措施,就会将这个互斥体标记为废弃,并自动释放所有权。共享这个互斥体的其他应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。这种状况是否会造成影响取决于涉及到的具体应用程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-25 03:52 , Processed in 0.140484 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表