References: <[email protected]>
In-Reply-To: <[email protected]>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Alisa, u callback funkciji (verovatno neka OnExit(...) ili OnClose(...)
funkcija u Windows-u) koja se poziva kada se prozor gasi (a time i
aplikacija ako je u pitanju jedanprozorwin32guiaplikacija) moras da
napises kod koji odradi kvalitetan i siguran izlazak programa. Ja cu ovo
objasniti na primeru, koji doduse nema veze sa "standardnim" Windows
programiranjem, a koji radi i na Windows-u takodje.
Primer iz eFLTK tread_ball aplikacije koja po difoltu kad se startuje
ima 5 loptica koje lete okolo i odbijaju se od zidova (ivica prozora):
Code:
....
void send_threads_exit(Fl_Widget *w, void *d)
{
// Unlock EFLTK mutex (callbacks are always locked by efltk)
Fl::unlock();
int i;
// Send kill_thread for all threads
for(i=0; i<BALL_CNT; i++) {
balls[i]->kill_thread();
}
// Join all threads (wait exit)
for(i=0; i<BALL_CNT; i++) {
balls[i]->join();
printf("Killed thread: %dn", i);
delete balls[i];
}
// Lock mutex again, FLTK unlocks it
Fl::lock();
w->hide();
}
....
....
void send_threads_exit(Fl_Widget *w, void *d)
{
// Unlock EFLTK mutex (callbacks are always locked by efltk)
Fl::unlock();
int i;
// Send kill_thread for all threads
for(i=0; i<BALL_CNT; i++) {
balls[i]->kill_thread();
}
// Join all threads (wait exit)
for(i=0; i<BALL_CNT; i++) {
balls[i]->join();
printf("Killed thread: %dn", i);
delete balls[i];
}
// Lock mutex again, FLTK unlocks it
Fl::lock();
w->hide();
}
....
Ovo gore je funkcija koja se poziva kada korisnik "pritisne na X".
Najtacnije receno ova funkcija se poziva u callback funkciji (event)
koja se poziva pri zatvaranju prozora.
Ne obracaj paznju na argumente funkije, na otkljucavanje EFLTK muteksa i
slicno, to su stvari vezane za EFLTK (multiplatform GUI toolkit).
Ovde nas zapravo interesuju ove dve petlje u toj funkciji - one su
zapravo ono sto ti treba da odradis u svojoj aplikaciji.
Prva petlja posalje nitima (balls[] je niz Thread objekata) kill signal.
Druga petlja "join"-uje sve aktivne niti.
Nakon nje su sve niti ugasene i aplikacija moze slobodno da se "ugasi".