正在做的软件升级系统,像QQ升级一样,升级程序运行时,主程序运行不了,要等升级程序运行完毕,主程序才可以继续运行

这里采用命名互斥量来实现进程间互斥

主程序代码:

 HANDLE m_hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,L"MYHTTP");  //打开互斥量,如果之前不存在,则返回值为0,否则返回非零值

if(m_hMutex) 
 {
  WaitForSingleObject(m_hMutex,INFINITE);  //等待升级程序运行结束
 }
 ReleaseMutex(m_hMutex);CloseHandle(m_hMutex);


 

 

升级程序:(假设默认主程序停止运行)

HANDLE m_hMutex = CreateMutex(NULL, TRUE, L"MYHTTP");  //创建互斥量
 if (GetLastError() == ERROR_ALREADY_EXISTS) 
 {
  printf("ALREADY EXISTS"); 
  CloseHandle(m_hMutex);
  m_hMutex = NULL;
  
 }

实现

ReleaseMutex(m_hMutex);  //释放互斥量

刚刚实现的是两个进程间的互斥,已经通过测试,下面讲的是避免一个程序启动两次,即一个进程有两个实例:

// 创建互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");
// 检查错误代码
if (GetLastError() == ERROR_ALREADY_EXISTS) {
 // 如果已有互斥量存在则释放句柄并复位互斥量
 CloseHandle(m_hMutex);
 m_hMutex = NULL;
 // 程序退出
 return FALSE;
}