Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » mehrfachstart einer anwendung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.10.2003, 18:24 Uhr
mmc20
puss in boots


hi,
ich habe eine dialoganwendung welche mehrfach gestartet werden muss, wie kann ich jetzt im programm feststellen die wievielte instanz des programms gerade gestartet wurde ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.10.2003, 18:41 Uhr
~ugur
Gast


Hallo mmc20,
dafür kannst du die (IPC) Interprocesscommunikation Methode benutzen.
Einen anderen Weg weiss ich nicht.

ugur.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.10.2003, 19:01 Uhr
ugur



Also zb. ein Event oder Mutex erzeugen und im InitInstance und ExitInstance immer die anderen benachrichtigen.
Aber das ist für normale Fälle.
Es kann sein, dass deine Anwendung erst mal zb. 6 mal gestartet ist.
Dein process counter zeigt dann 6. ( "process_counter = 6")
Aber wenn eine von diesem Anwendungen unerwartet beendet wird ("abnormal programm termination" oder sowas ..) wird deine process_counter nicht die richtige Zahl geben.
Alse besser, nicht nur im InitInstance und ExitInstance, sondern immer zwischen die Processe kommunikieren. Dafür ein Timer benutzen. OnIdle kannst du auch verwenden.

Hoffentlich habe ich nicht so kompliziert geschrieben.
Es tut mir leid wegen mein schechtes Deutsch

ugur.

Dieser Post wurde am 12.10.2003 um 19:02 Uhr von ugur editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.10.2003, 19:52 Uhr
mmc20
puss in boots


hi,
ja erstmal nicht schlecht, das muss ich mir aber erst mal was genauer ansehen (bin noch am anfang meiner C++ karriere... *g*).
im prinzip gehts darum das diese programme beim start aus einer configdatei bestimmte daten lesen müssen, desshalb muss das prog wissen welchen bereich es lesen soll (damit zb. keine "resource" doppelt vergeben wird). eine kommunikation zwischen den progs ist also nicht notwendig.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.10.2003, 12:21 Uhr
ugur



Hallo mmc20,
eine andere Lösung ist, dass du am Anfang die Processliste duchgehst,
und überprüfst wieviele instance von deiner Prozesse gerade lauft.
Das kannst du mit EnumProcesses machen. Es gibt auch ein Beispiel im MSDN wie man die Processliste nimmt.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/base/enumerating_all_processes.asp

Hoffentlich hilft dir das weiter.

ugur.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.10.2003, 17:43 Uhr
mmc20
puss in boots


hi,
ja, hört sich vielversprechend an... hätt ich gern mal ausprobiert... ABER leider giebt es auf meinem system (& auf der visual cd) die "psapi.h" nicht die "psapi.dll" ist vorhanden nützt aber nichts ohne header... schade hab auch schon "ggoogelt" aber nichts zum download gefunden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.10.2003, 20:04 Uhr
mmc20
puss in boots


soooo, da hab ich mich mal hingesetzt und folgendes zusammengebastelt :
das ganze steht bei mir in der OnInitDialog und funktioniert auch hervorragend.


C++:
    AfxEnableControlContainer();

    bool vorhanden = false;
    CString str="ProgrammInstanz#1";
    int index = 1;

    HANDLE hMutex =  CreateMutex(NULL, TRUE, str);
    if(GetLastError() == ERROR_ALREADY_EXISTS)
        vorhanden = TRUE;
    while (vorhanden)
    {
        if(hMutex)
            ReleaseMutex(hMutex);
        index++;
        str.Format("ProgrammInstanz#%i", index);
        HANDLE hMutex =  CreateMutex(NULL, TRUE, str);
        if(GetLastError() != ERROR_ALREADY_EXISTS)
            vorhanden = false;
    }
    m_InstanceCount = index;



jetzt halt die frage an die profis, ist das so in ordnung oder kanns da mal zu einem fehler kommen der das prog abschmieren lässt ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: