发信人: softlag() 
整理人: wenbobo(2002-12-06 23:27:39), 站内信件
 | 
 
 
发现有好些朋友用FindWindow的方法来限制一个实例运行 其实这种方法有一定缺 陷
 因为在创建实例和创建主窗口之间存在一定的的时间延时 另一个实例可能在这个 时间断内启动从而逃过检查!!!
 M$推荐的方法是在应用中创建一个名为互斥体的唯一资源来对另一个实例的运行 进行限制
 
 #define APP_MUTEX "{12345678-1234-1234-1234-12345678901}" //这是一个用 GUIDGEN.EXE生成的ID号
 .
 .
 .
 BOOL CYourApp::InitInstance()
 {
 m_hMutex = ::CreateMutex( NULL, FALSE, APP_MUTEX );//创建互斥体
 if( GetLastError() == ERROR_ALREADY_EXISTS )//存在另一个实例
 {
 AfxMessageBox( "程序已经运行" );
 return FALSE;
 }
 ...
 }
 ...
 int CYourApp::ExitInstance()
 {
 CloseHandle( m_hMutex );//关闭互斥体
 ...
 }
  -- 我最讨厌的是现在吸收的营养
 我最满足的是望着窗外脑袋里什么也不想
 最兴奋的时刻还没到来是因为我还没找到出路的方向
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.128.241.71]
  | 
 
 
 |