Az alábbi kód is hibás!! Helyes kód a fentebb alábbihoz!!
Néha csak egy példányt kell engedélyeznünk az alkalmazásnak, és amikor a folyamat elindul, ha azt tapasztalja, hogy egy példány fut, automatikusan leáll. Általában a Fő funkcióban valósítjuk meg Mutex mutexen keresztül, amely általában így írható:
Amikor válaszokat keresünk, gyakran sietve jösszünk-megyünk, figyelmen kívül hagyva a Mutex jellemzőit és óvintézkedéseit. Egy egyszerű teszt után, rendben, csináld meg és használd. Ezen a ponton figyelmen kívül hagyunk egy fontos előfeltételt:Mutex névadási konvenciók. A fenti írásmód egyetlen felhasználó alatt gond nélkül működik; Többfelhasználós állapotban minden felhasználó elindíthat egy példányt, így egyetlen példány nem garantálható.
Ha terminálszerveren kell használni, és csak egy példányt engedélyezsz, használd a következő módszert:
Íme az MSDN leírása:
Terminálszolgáltatásokat futtató szervereken a nevelt rendszer mutexje két szintű láthatósággal bírhat. Ha a név a "Global\" előtaggal kezdődik, a mutex minden terminálszerver ülésen látható. Ha a név a "Local\" előtaggal kezdődik, a mutex csak a terminálszerver ülésen látható, ahol létrehozta. Ebben az esetben minden másik terminálszerver ülésnek lehet egy külön mutex ugyanazzal a névvel megvan. Ha létrehozol egy nevelt mutexet előtag megadás nélkül, akkor az "Local\" előtagot veszi fel. Egy terminálszerver ülés során két különböző névelőtagú mutex független mutex, és ezek a két mutex minden folyamat számára látható a terminálszerver ülés során. Vagyis a "Global" és "Local" előtagok a mutex név tartományát a terminálszerver üléshez viszonyítják, nem a folyamathoz.
|