Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako spreciti dvostruko startovanje MFC programa?

[es] :: C/C++ programiranje :: Kako spreciti dvostruko startovanje MFC programa?

[ Pregleda: 4372 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dr.Aculla
x-files

Član broj: 22011
Poruke: 25
*.vdial.verat.net.



Profil

icon Kako spreciti dvostruko startovanje MFC programa?26.05.2006. u 23:33 - pre 217 meseci
Napisao sam programce koje se po startovanju i minimiziranju glavnog prozora smesta u systray! Kako spreciti da se klikom na ikonu programa na desktopu program dvostruko startuje (Npr/ neko ne vidi ikonicu u systray-u i klikne na glavnu ikonu kojom se program startuje)?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Kako spreciti dvostruko startovanje MFC programa?27.05.2006. u 07:52 - pre 217 meseci
To ze kaze, kako dozvoliti samo 'jednu instancu' ('one instance', 'single instance') programa.
Stvar se obicno resava tzv Mutex-ima, a primera na netu mozes naci koliko god hoces, npr:

http://www.codeguru.com/forum/showthread.php?t=312467
http://www.codersource.net/mfc_single_instance.html
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..81.static.rny.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Kako spreciti dvostruko startovanje MFC programa?29.05.2006. u 08:59 - pre 217 meseci
Ima vise mogucih alternativa. Evo nekih:
1) Mozes koristiti read-write lock. Prva instanca aplikacije zakljuca fajl, recimo C:/tmp/myapp.lock (napravi fajl ako ne postoji), kada se startuje druga instanca, onda ona pokusa da lokuje fajl, ako ne uspe ugasi se.
2) Slicna prica kao u prethodnom. U Registry napravis kljuc HKEY_CURRENT_USER/Software/MyApp/lock i setujes mu vrednost tako sto uzmes PID od programa. Druga instanca otvori Registry, pogleda tu vrednost i uporedi sa svojim PID-om, ako nije isti, gasi se. Ne treba napominjati da je odgovornost prve aplikacije da obrise lock vrednost prilikom gasenja, inace se program vise nikada nece startovati. :D
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net.



+3 Profil

icon Re: Kako spreciti dvostruko startovanje MFC programa?29.05.2006. u 17:52 - pre 217 meseci
Jos jedna mogucnost (Win32): glavnom prozoru svog progama dodelis unikatno ime klase, npr "_#@$$DR_ACCULLA_SYSTRAY_MASTER_V10$$@#_", a zatim koristis proveru:
Code:

#define CLASS_NAME "_#@$$DR_ACCULLA_SYSTRAY_MASTER_V10$$@#_"
//...
if(FindWindow(CLASS_NAME, NULL)){
    //...
}


O_o
 
Odgovor na temu

Dr.Aculla
x-files

Član broj: 22011
Poruke: 25
*.vdial.verat.net.



Profil

icon Re: Kako spreciti dvostruko startovanje MFC programa?30.05.2006. u 10:50 - pre 217 meseci
Hvala svima!
 
Odgovor na temu

mipko

Član broj: 11015
Poruke: 109
82.117.193.*



Profil

icon Re: Kako spreciti dvostruko startovanje MFC programa?31.05.2006. u 09:23 - pre 217 meseci
a mozes i sa named mutex-om. Prva instanca kreira mutex a sledecim instancama ce prilikom kreiranja getlasterror da vrati ERROR_ALREADY_EXISTS.
 
Odgovor na temu

cynique
Ivan Štambuk
Zagreb@Croatia

Član broj: 93690
Poruke: 155
193.198.17.*

ICQ: 106979934
Sajt: istambuk.blogspot.com


Profil

icon Re: Kako spreciti dvostruko startovanje MFC programa?31.05.2006. u 10:49 - pre 217 meseci
Citat:
leka: Ima vise mogucih alternativa. Evo nekih:
1) Mozes koristiti read-write lock. Prva instanca aplikacije zakljuca fajl, recimo C:/tmp/myapp.lock (napravi fajl ako ne postoji), kada se startuje druga instanca, onda ona pokusa da lokuje fajl, ako ne uspe ugasi se.


RWlock kao kernelov sinkronizacijski primitiv dolazi tek u Visti, premda ga nije previše teško ručno izgraditi nad tradicionalnim win32 API-jem. Na Win32 bi analog bio uzajamno isključiv pristup nekom praznom dummy fajlu u temp direktoriju čiji bi pristup bio sinkroniziran sa LockFile().

Citat:
2) Slicna prica kao u prethodnom. U Registry napravis kljuc HKEY_CURRENT_USER/Software/MyApp/lock i setujes mu vrednost tako sto uzmes PID od programa. Druga instanca otvori Registry, pogleda tu vrednost i uporedi sa svojim PID-om, ako nije isti, gasi se. Ne treba napominjati da je odgovornost prve aplikacije da obrise lock vrednost prilikom gasenja, inace se program vise nikada nece startovati. :D


Zato i jest bolje koristiti kernel objekte koje imaju koncept vlasništva (ownership), poput mutexa. U slučaju terminiranja niti koja ga je stvorila (npr. glavne niti procesa koja izlazi kad i proces sam), WFSO() će vratiti WAIT_ABANDONED i novi proces će automatski preuzeti vlasništvo. Ime mutexa je najbolje generirati prilikom instalacije kao GUID.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kako spreciti dvostruko startovanje MFC programa?

[ Pregleda: 4372 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.