怎么让一个程序在内存中只有它的一个进程?
如题:
QQ可以在内存中有多个它的进程,但我要我的程序在内存中只有且紧有一个进程,该怎么办,

解决方案 »

  1.   

    HANDLE hMutex; // Create a mutex with no initial owner.hMutex = CreateMutex( 
        NULL,                       // no security attributes
        FALSE,                      // initially not owned
        "MutexToProtectApp");  // name of mutexif (hMutex == NULL) 
    {
        // Check for error.
    }
      

  2.   

    有窗口时在InitInstance里
    if(!FirstInstance)
             return false;函数定义
    BOOL C***App::FirstInstance()
    {
    CWnd *pWndPrev;
    pWndPrev = CWnd::FindWindow(NULL, _T("窗口标题"));
    if(pWndPrev != NULL)
    {
    return FALSE;
    }
    else
    {
    return TRUE;
    }
    }
      

  3.   

    还有一种通用方法就是程序一运行就写到注册里,做个标记...当后面再有实例运行时先查找此标记有无...当然当程序OVER时得弄掉...
      

  4.   

    关于这个问题,我以前写了篇小总结,题为“简单的方法让一个应用程序只运行一个实例”:一个程序可以运行多个实例(进程),那我们如何让它仅运行一个实例呢?很简单,使用#pragma编译器指令在进程的地址空间内创建一个“共享节”就可以达到目的,这个“共享节”里的数据为多个运行的进程所共享,这样我们通过设置一个变量比如:unsigned g_nInstanceCount;作为运行实例的计数,在程序入口处检测一下g_nInstanceCount是否为1,true则禁止运行,否则g_nInstanceCount++并运行一个实例。
    具体如下:
    #pragma data_seg("Shared")//这个共享节叫做Sharedunsigned g_nInstanceCount =0;//计数初始为0#pragma data_seg() //设置完毕#pragma comment(linker,"/:SECTION:Shared,RWS")//这句话告诉连接器,我要将Shared设为读写共享好了,让我们实际动手来做一个小的例子看看:/********************************************   基于控制台的********************************************/
    #include <iostream>
    using namespace std;#pragma data_seg("Shared")unsigned g_nInstanceCount = 0;#pragma data_seg()#pragma comment(linker,"/SECTION:Shared,RWS")int main()
    {
        
       if(g_nInstanceCount>=1)
       {
         cout<<"Can only running an instance!"<<endl;
         return 0;
      }   g_nInstanceCount++;  //实例计数加1      cout<<"This is a console program!"<<endl;
          system("pause");
          return 0;
    }运行第一个实例:...... 
      

  5.   

    InitInstance()中加入   
      CString   mutexName   =   "MyAPP";      
      ::CreateMutex(NULL,FALSE,mutexName);   
      if(ERROR_ALREADY_EXISTS==GetLastError())   
      {   
         AfxMessageBox("Already run!");   
         return   FALSE;   
      } 
      

  6.   

    crystal521(【云淡风轻】)的代码可以达到效果
    hurryboylqs(中山三郎) 的代码在VC6.0下可以达到效果,但是在其它IDE中就不一定了,()))00如(Code Block)就不能,这就是不同的编译器造成的吧。
    谢谢。