正在做的软件升级系统,像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;
}