Dialog - Dialog nur 1mal aktiv; 2.Dialog soll warten.
-
Ein Dialog meines Programmes wird per Kommandozeile gestartet. Er soll aber nur einmal aktiv sein, d.h. während der 1.Dialog aktiv ist, wird er evtl. noch einmal aufgerufen. Dann soll er aber erst wieder starten, nachdem seine 1.Instanz beendet ist.
Ich hab´ versucht, das Beispiel aus dem Archiv entsprechend zu ändern:char *psMutexName = "Programmname"; while(1) { DWORD dwError;CreateMutex(NULL, true, psMutexName); dwError = GetLastError(); if (!ERROR_ALREADY_EXISTS == dwError) break; }
...das funzt aber nicht. Das Programm kommt aus der Schleife nicht heraus.
-
Hier stand Quatsch...Sorry images/smiles/icon_sad.gif
[ Dieser Beitrag wurde am 13.02.2002 um 18:49 Uhr von Peterson editiert. ]
-
mach mal zwei klammern um die abfrage:
[cpp]
if (!(ERROR_ALREADY_EXISTS == dwError)) break;[/cpp]
-
Und vieleicht setzt du noch ein SetLastError(NULL); vor das CreateMutex.., denn wenn zwischendurch keiner nen Fehler schmeißt, dann bleibt ja dein ERROR_ALREADY_EXISTS, und soweit ich weis bezieht sich GetLastError immer auf den Thread in dem es aufgerufen wird.
[ Dieser Beitrag wurde am 13.02.2002 um 19:11 Uhr von Peterson editiert. ]
-
Okay, danke erstmal. Werd ich morgen testen.
-
So, Kinder...
...das hat also nicht geklappt. Problem ist nicht nur, das das Prog nicht aus der Schleife rauskommt, sondern das es in der Zwischenzeit 99% Systemressourcen beansprucht.
Ich wüsste jetzt nicht mal mehr im Ansatz eine vernünftige Lösung...
-
Ist total primitiv aber läuft.
Systemauslastung ist bis auf einen kurzen Peak beim start des zweiten Programme srecht normal....while(FindWindow(NULL,"test69")) { Sleep(1000); } CTest69Dlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal();
-
OK,
hier noch die "professi...." Variante.
Klappt auch ohne hohe CPU Last. Vieleicht einmal die FAQ aktualisieren.
char *psMutexName = "Programmname"; DWORD dwError; HANDLE h_Mutex = CreateMutex(NULL, true, psMutexName); dwError = GetLastError(); if (ERROR_ALREADY_EXISTS == dwError) { WaitForSingleObject(h_Mutex, INFINITE); CreateMutex(NULL, true, psMutexName); } CTest69Dlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal();
-
ok ich machs in die FAQ images/smiles/icon_smile.gif