Allolev kood on samuti vale!! Õige kood nagu eelpool!!
Mõnikord tuleb lubada ainult ühel rakenduse instantsil töötada, ja kui protsess algab, siis kui avastatakse, et rakenduse instants töötab, peatub see automaatselt. Tavaliselt rakendame seda põhifunktsioonis Mutex mutexi kaudu, mis tavaliselt kirjutatakse:
Kui otsime vastuseid, tuleme ja läheme tihti kiirustades, ignoreerides Mutexi omadusi ja ettevaatusabinõusid. Pärast lihtsat testi, okei, tee see ja kasuta. Siin jätame tähelepanuta olulise eeltingimuse:Mutexi nimetamise tavad. Ülaltoodud kirjutamismeetod toimib ühe kasutaja puhul probleemideta; Mitme kasutajaga süsteemis saab iga kasutaja käivitada ühe instantsi, seega ei saa ühte instantsi garanteerida.
Kui pead seda kasutama terminaliserveris ja lubama ainult ühte instantsi, kasuta järgmist meetodit:
Siin on MSDN-i kirjeldus:
Terminaliteenuseid kasutavatel serveritel võib nimega süsteemi mutex omada kahte nähtavuse taset. Kui nimi algab eesliitega "Global\", on mutex nähtav kõigis terminalserveri sessioonides. Kui nimi algab eesliitega "Local\", on mutex nähtav ainult terminaliserveri sessioonis, mis selle lõi. Sellisel juhul võib igal teisel terminaliserveri sessioonil serveris olla eraldi mutex sama nimega. Kui lood nimelise mutexi ilma prefiksi määramata, võtab see prefiksi "Local\". Terminaliserveri sessioonis on kaks mutexit erinevate nimede prefiksiga iseseisvad mutexid ning need kaks mutexit on nähtavad kõigile terminalserveri sessiooni protsessidele. See tähendab, et eesliide nimed "Global" ja "Local" kirjeldavad mutex-nime ulatust terminaliserveri sessiooni suhtes, mitte protsessi suhtes.
|