Zemāk esošais kods arī ir nepareizs! Pareizs kods, kā iepriekš!
Dažreiz mums ir jāļauj palaist tikai vienu lietojumprogrammas instanci, un, kad process sākas, ja tiek konstatēts, ka darbojas lietojumprogrammas instance, tas automātiski pārtrauks darbību. Mēs to parasti īstenojam galvenajā funkcijā, izmantojot Mutex mutex, kas parasti ir rakstīts:
Kad mēs meklējam atbildes, mēs bieži nākam un ejam steigā, ignorējot Mutex funkcijas un piesardzības pasākumus. Pēc vienkārša testa, labi, ņemiet to un izmantojiet to. Šajā brīdī mēs ignorējam svarīgu priekšnoteikumu:Mutex nosaukumu konvencijas. Iepriekš minētā rakstīšanas metode darbojas bez problēmām ar vienu lietotāju; Vairāku lietotāju gadījumā katrs lietotājs var startēt vienu instanci, tāpēc nevar garantēt vienu instanci.
Ja tas ir jāizmanto termināļa serverī un jāatļauj tikai viens gadījums, izmantojiet šādu metodi:
Šeit ir MSDN apraksts:
Serveros, kuros darbojas termināļa pakalpojumi, nosauktās sistēmas muteksam var būt divi redzamības līmeņi. Ja nosaukums sākas ar prefiksu "Global\", mutekss ir redzams visās termināļa servera sesijās. Ja nosaukums sākas ar prefiksu "Local\", mutex ir redzams tikai termināļa servera sesijā, kas to izveidoja. Šajā gadījumā katrai citai termināļa servera sesijai serverī var būt atsevišķs mutekss ar tādu pašu nosaukumu. Ja izveidojat nosauktu muteksu, nenorādot prefiksu, tas izmantos prefiksu "Local\". Termināļa servera sesijā divi muteksi ar dažādiem nosaukumu prefiksiem ir neatkarīgi muteksi, un abi muteksi ir redzami visiem termināļa servera sesijas procesiem. Tas nozīmē, ka prefiksa nosaukumi "Global" un "Local" apraksta mutex nosaukuma diapazonu attiecībā pret termināļa servera sesiju, nevis procesu.
|