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

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

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

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

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

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

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

#include
#include
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<<"已经有一个实例运行!"<return;
}
  else
 cout<<"仅有一个实例运行,进行其他功能的实现"<   Sleep(40000);




}

运行一个实例(进程)功能的多种常用实现_第3张图片

你可能感兴趣的:(实例,线程,编译器,互斥,MFC)