程序或函数指定了太多的引数_C/C++进程互斥API函数

45273fd7f40ed78116f0c95d47c7c5cc.png

文章简介

" 进程互斥 "这个词可能有点陌生,所谓的 进程互斥 ;就是在一台电脑上只能运行一个实例。如果当前程序已经在电脑上运行,那么当你在次运行这个程序时,程序就会检测到当前程序已经运行,那么当前就会结束自身不在运行。这样的程序很常见,列如:小伙伴们经常使用的 360安全卫生,像这样的程序都是单一运行的,一台电脑上只能运行一个实例。

CreateMutex函数介绍

实现 程序互斥 的方式有很多,下面就用比较简单的一种来演示一下。用到的API函数CreateMutex,此函数会检测当前系统指定(进程)程序 是否已经运行。如果没有运行就创建一个互斥体;然后继续运行。如果指定程序(进程)已经运行,指定程序就会检测到互斥体已经创建,那么指定程序就会结束自身不在运行。

HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
BOOL bInitialOwner, // 初始化互斥对象的所有者
LPCTSTR lpName // 指向互斥对象名的指针
);
CreateMutex函数参数介绍

lpMutexAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值),表示使用不允许继承的默认描述符
bInitialOwner BOOL,如创建进程希望立即拥有互斥体,则设为TRUE。一个互斥体同时只能由一个线程拥有
lpName String,指定互斥体对象的名字。用vbNullString创建一个未命名的互斥体对象。如已经存在拥有这个名字的一个事件,则打开现有的已命名互斥体。这个名字可能不与现有的事件、信号机、可等待计时器或文件映射相符

函数代码
#include "stdafx.h"
#include "windows.h"

int _tmain(int argc, _TCHAR* argv[])
{



	HANDLE  g_Handle = CreateMutex(NULL, FALSE, "hello");
	BOOL Reset = GetLastError();

	if (g_Handle)
	{
		if (Reset == ERROR_ALREADY_EXISTS)
		{
			MessageBox(NULL, "程序已经运行", "错误提示", MB_OK);
			return 0;
		}

	}

	printf("hello world");

	getchar();
	

}
效果演示

3f7b56dfb6f10ae2bcd1831708bb432b.png

代码很简单,使用CreateMutex函数,别忘了;需要包含windows.h头文件。除了这种方式外,还可以通过枚举系统进程的方式,来判断程序是否已经运行。当然!还有其他方法,个人觉得相比较这种方式要简单一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值