退出程序后立即重新进入,由于程序使用了防止重入的代码,检测到内存中有程序实例,主要是有线程没结束,所以不能重入。我在检测程序实例的代码中加入一个Sleep(ntime),但没有效果,即使ntime值很大。
有没有办法,使第二次进入的程序等待一定时间(如3秒),如果在这段时间内上一个实例不存在了,就继续程序否则第二次进入失败。
或者在程序退出时加一个进度条之类的提示,在程序所有线程退出后告诉用户。能否有办法实现?

解决方案 »

  1.   

    To njtu(天地不容):我就是那个意思。
      

  2.   

    手动发送 WM_QUIT ,强行结束程序,看看能不能杀死线程。(我没有试过)
      

  3.   

    CString classname="CFMutextedMuroachanf";
        HANDLE m_hmutex=OpenMutex(MUTEX_ALL_ACCESS,0,classname);
    if(m_hmutex==NULL)   
            m_hmutex=CreateMutex(NULL,1,classname);
    else
    return FALSE;当然,结束时候必须使用
    CloseHanle(m_hmutex);
    注意程序结束后释放所有资源,否则即使你程序跑起来了,其潜在出错的可能也是不可估量的。
      

  4.   

    OnDestroy()中加一个进度指示:
             CCloseProgress dlg;  
    dlg.Create(IDD_DIALOG2);
    dlg.m_Progress.SetRange(0,100);
    dlg.m_Progress.SetPos(0);
    dlg.CenterWindow();

    do something dlg.m_Progress.SetPos(20);
    do something
    dlg.m_Progress.SetPos(40);do something
    dlg.m_Progress.SetPos(60);
    do something
    dlg.m_Progress.SetPos(70);
    do something
    dlg.m_Progress.SetPos(90);
    do something
    dlg.m_Progress.SetPos(100);
      

  5.   

    非常感谢各位,采用johnxie132(johnxie132) 的方法解决,得到测试人员认可。
    结贴