发信人: 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]
|
|