zoukankan      html  css  js  c++  java
  • 使用互斥体防止程序多开技术

              使用互斥体防止程序多开技术

    学习完线程的同步函数. 互斥体的应用.那么我们可以使用互斥体进行放多开设置.

    一丶编写思路.

    在编写互斥体防止多开的时候.我们要查询下MSDN.看下互斥体的介绍.

    看到互斥体MSDN返回值说的一段话.

    If the function succeeds, the return value is a handle to the mutex object. If the named mutex object existed before the function call, the function returns a handle to the existing object and GetLastError returns ERROR_ALREADY_EXISTS. Otherwise, the caller created the mutex.

    If the function fails, the return value is NULL. To get extended error information, call GetLastError

    上面的英文意思是.如果函数成功.则返回互斥体的句柄.如果调用此函数.发现名字已经有了.表示这个函数在之前已经调用过了.所以则会返回  ERROR_ALREADY_EXISTS的宏. 这个宏的意思就是已经存在.

    如果函数失败.则返回NULL.  返回的宏必须调用 GetlastError获取.

    根据上面返回值的意思我们明白了. 这个函数如果调用过则会返回 已经存在的宏. 那么我们可以写程序来校验一下.

    #include "stdafx.h"
    #include <Windows.h>
    //创建临界区结构
    
    int main(int argc, char *argv[])
    {
        //初始化临界区全局原子变量
        HANDLE MutexHandle = CreateMutex(NULL, FALSE, TEXT("AAA"));  //创建互斥体. 信号量为0. 有信号的状态.wait可以等待
        DWORD ErrorCode = 0;
        ErrorCode = GetLastError();
        if (ERROR_ALREADY_EXISTS == ErrorCode)
        {
            printf("对不起,程序已经启动一份了.这份即将关闭
    ");
            CloseHandle(MutexHandle);
    
            system("pause");
        }
        if (NULL == MutexHandle)
        {
            return 0; //表示句柄获取失败
        }
    
        for (size_t i = 0; i < 10; i++)
        {
            Sleep(1000);
            printf("当前程序运行中. EIP 位置 等于 %d 
    ", i);
        }
        system("pause");
        return 0;
    }

    我们打开同样的两个程序

    一份提示正在执行.一份提示即将关闭.这个则是互斥体防止多开的原理.

    当然有很多这样的方法.这个只是其中一种.

  • 相关阅读:
    第三第四周的笔记
    第一二周的笔记
    jQuery的一些笔记
    函数的执行环境与调用对象
    从click事件理解DOM事件流
    慕课编程题JS选项卡切换
    adb(11)-重新挂载 system 分区为可写
    adb(10)-屏幕截图/录制
    adb(9)-查看设备信息
    adb(8)-查看日志
  • 原文地址:https://www.cnblogs.com/iBinary/p/9574278.html
Copyright © 2011-2022 走看看