Mutex wird nicht entfernt



  • Hallo,

    ich setze einen Mutex für einen Subdialog meiner Anwendung.
    Nun ist es offenbar so, dass der Mutex nicht gelöscht wird,
    sobald das nicht modale Unterfenster des Hauptdialoges geschlossen
    wird.

    Wie kann ich das dann aber bewerkstelligen, dass man den Unterdialog
    nicht zweimal gleichzeitig öffnen kann?

    HANDLE hMutex;
    	hMutex = CreateMutex(NULL, TRUE, "Dialog2-Test");
    	if(GetLastError() == ERROR_ALREADY_EXISTS)
    	{
    		MessageBox("Test - Mutex existiert bereits!");
    		OnOK();
    	}
    

    Ich vermute der richtige Weg wäre mit FindWindow zu schauen ob das Fenster
    bereits existiert?!


  • Mod

    CloseHandle vergessen?



  • An dem CloseHandle lag es nicht. Eben hab ich den Mutex entfernt und
    nun noch immer das Problem.

    Ich rufe den Unterdialog wie folgt auf:

    CWnd* pdfworkerwindow = FindWindow(NULL,"Testfenster");
    
    if(!pdfworkerwindow)
    {
    	m_pMyDlgPtryls = new pdfsbearbeiten;
    
    	if(text!="")
    	{
    
    	m_pMyDlgPtryls->setzepdfdatei(pdfzubearbeiten);//ist ein CString
    	}
    	m_pMyDlgPtryls->Create(IDD_DIALOG23);
    	m_pMyDlgPtryls->ShowWindow(SW_SHOW);
    
    }else
    {
    	pdfworkerwindow->SetForegroundWindow();
    
    }
    

    Beim Schließen wird lediglich der Code in OnClose gerufen:

    CDialog::OnClose();
    

    Einmal kann ich das Fenster erzeugen...und danach erst wieder, wenn ich die
    ganze Anwendung neu starte (wobei diese auch einen Mutex besitzt...).



  • Mist, ich hätte OnClose mit

    DestroyWindow();
    

    überschreiben müssen
    und es nicht mit

    CDialog::OnClose();
    

    schließen dürfen.


  • Mod

    Warum verwendest Du FindWindow um das Parent zu finden? Sher eigentümlich.

    Wenn es nur ein Fenster dieser Klasse geben soll, warum verwendest Du einen Mutex und machst es nicht einfacher mit einem statischen Flag in der CDialog Klasse, oder einem Singleton Konstrukt?

    Einen Mutex finde ich bei so etwas Overkill...


Log in to reply