精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>技术精解:内存、进程、线程等>>防止无窗口的windows程序重复运行

主题:防止无窗口的windows程序重复运行
发信人: mr_rabbit()
整理人: wenbobo(2002-12-06 22:36:44), 站内信件

   

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.162.35]
发信人: dunhill (烟灰飞扬), 信区: CLanguage
标  题: Re: 如何防止一个没有窗体的WINDOWS程序的重复运行?(无内容)
发信站: 网易虚拟社区 (Fri Sep 10 11:15:11 1999), 站内信件

用互斥(Mutex)吧,Mutex本来是多线程同步用的,防止
多个线程访问同一资源而引发冲突。用CreateMutex可以
创建Mutex对象,实质上是一个kernel对象。

在任何Win32程序(包括GDI和Console)的启动部分加上
以下代码(Console程序的main函数、MFC程序的CWinApp
派生类的InitInstance成员函数、RawSDK程序的WinMain
函数):
    hMutex = CreateMutex(
        NULL,                        // no security attributes
        FALSE,                       // initially not owned
        "RunOnlyOneInstance");       // 命名Mutex是全局对象
                                     // 在所有的process都可以访问到

    if (hMutex == NULL || 
        ERROR_ALREADY_EXISTS == ::GetLastError()) {
        // 程序第二次或以后运行时,会得到Mutex已经创建的错误
        return FALSE;
    }
嘿嘿,是不是不用FindWindow优雅简洁多了?

另外,如果要限定程序同时可运行n个实例怎么办?
Tips:用信号量(Semaphore)。

--
烟水寻常事,荒村一钓徒。
深宵沉醉起,无处觅菰蒲。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.75.46.91]

[关闭][返回]