单例程序的实现


一、利用信号量实现进程间


代码如下:
       
 	HANDLE hSem = CreateSemaphore(NULL, 1, 1, m_pszExeName); // 创建命名的信号量

        // 信号量存在,则程序已有一个实例运行
        if (GetLastError() == ERROR_ALREADY_EXISTS)
        {
            // 关闭信号量句柄
            CloseHandle(hSem);

            // 寻找先前实例的主窗口
            HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(),GW_CHILD);
            while (::IsWindow(hWndPrevious))
            {
                // 检查窗口是否有预设的标记
                if (::GetProp(hWndPrevious, m_pszExeName))
                {
                    // 主窗口已最小化,则恢复其大小
                    if (::IsIconic(hWndPrevious))
                    {
                        ::ShowWindow(hWndPrevious,SW_RESTORE);
                    }

                    // 将主窗激活
                    ::SetForegroundWindow(hWndPrevious);
                    // 将主窗的对话框激活
                    ::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));

                    // 退出本实例
                    return FALSE;
                }

                // 继续寻找下一个窗口
                hWndPrevious = ::GetWindow(hWndPrevious,GW_HWNDNEXT);
            }

            // 前一实例已存在,但找不到其主窗
            // 可能出错了
            // 退出本实例
            return FALSE;
        }

二、创建共享数据段实现

#pragma data_seg("MYDATA")  
//在此处定义变量,例如int i = 0; 
#pragma data_seg () 

#pragma comment(linker,"/SECTION:MYDATA,RWS") //设置改段为共享段

三、利用socket通讯实现
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值