运行一个实例(进程)功能的多种常用实现

预备知识:事件对象的使用,互斥对象的使用,预编译指令的简单使用,这些知识可以查找其他资料学习,在这里没有介绍,查资料也是一个重要的学习过程

1、利用命名的事件对象实现运行一个实例

//利用命名的事件对象实现只有一个实例运行
#include<windows.h>
#include<iostream>
using namespace std;
HANDLE g_hEvent;
void main()
{
   g_hEvent=CreateEvent(NULL,FALSE,TRUE,"RUNNING");
   if(g_hEvent)
   {
  if(ERROR_ALREADY_EXISTS==GetLastError())
  {
  cout<<"只有一个实例可以运行"<<endl;
  return;
  }
  
  else
  cout<<"第一个实例开始运行,其他功能的实现"<<endl;
  
   }
   Sleep(40000);//防止主线程退出使得整个进程结束,从而防止先前的线程提前结束
}

2、利用命名的互斥对象实现一个运行实例

   #include<windows.h>
#include<iostream>
using namespace std;
HANDLE m_Mutex;
void main()
{
   m_Mutex=CreateMutex(NULL,FALSE,"RUNNING");
   if( m_Mutex)
   {
  if(ERROR_ALREADY_EXISTS==GetLastError())
  {
  cout<<"只有一个实例可以运行"<<endl;
  return;
  }
  
  else
  cout<<"第一个实例开始运行,其他功能的实现"<<endl;
  
   }
   Sleep(40000);//防止主线程退出使得整个进程结束,从而防止先前的线程提前结束
}

3、利用编译器的功能实现

#include<windows.h>
#include<iostream>
using namespace std;
#pragma data_seg("Shared")     
int volatile g_lAppInstance =0;
#pragma data_seg()
#pragma comment(linker,"/section:Shared,RWS")
void main()
{
  if(++g_lAppInstance>1)
{
cout<<"已经有一个实例运行!"<<endl;
return;
}
  else
 cout<<"仅有一个实例运行,进行其他功能的实现"<<endl;
  Sleep(40000);




}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值