Alla oleva koodi on myös väärä!! Oikea koodi kuten yllä!!
Joskus meidän täytyy sallia vain yhden sovelluksen instanssi, ja kun prosessi alkaa, jos sovellus huomaa, että sovellus on käynnissä, se pysähtyy automaattisesti. Toteutamme sen yleensä pääfunktiossa Mutex mutexin kautta, joka yleensä kirjoitetaan:
Kun etsimme vastauksia, tulemme ja menemme usein kiireessä, unohtaen Mutexin ominaisuudet ja varotoimet. Yksinkertaisen testin jälkeen, okei, ota se ja käytä sitä. Tässä vaiheessa unohdamme tärkeän edellytyksen:Mutex-nimityksen käytännöt. Yllä oleva kirjoitustapa toimii ongelmitta yhdellä käyttäjällä; Monikäyttäjäjärjestelmässä jokainen käyttäjä voi käynnistää yhden instanssin, joten yksittäistä instanssia ei voida taata.
Jos sinun täytyy käyttää sitä päätepalvelimella ja sallia vain yksi instanssi, käytä seuraavaa menetelmää:
Tässä on MSDN:n kuvaus:
Terminaalipalveluita pyörittävillä palvelimilla nimetyllä järjestelmän mutexilla voi olla kaksi näkyvyystasoa. Jos nimi alkaa etuliitteellä "Global\", mutex näkyy kaikissa terminaalipalvelinistunnoissa. Jos nimi alkaa etuliitteellä "Local\", mutex näkyy vain terminaalipalvelimen istunnossa, joka sen loi. Tässä tapauksessa jokaisella toisella palvelimen päätepalvelimen istunnolla voi olla erillinen mutex samalla nimellä. Jos luot nimetyn mutexin ilman etuliitettä, se ottaa etuliitteen "Local\". Terminaalipalvelinistunnossa kaksi mutexia, joilla on eri nimietuliitteet, ovat itsenäisiä mutexeja, ja nämä kaksi mutexia näkyvät kaikille terminaalipalvelinistunnon prosesseille. Eli etuliitteet "Global" ja "Local" kuvaavat mutex-nimen aluetta suhteessa terminaalipalvelinistuntoon, eivät prosessiin.
|