[ leka @ 23.01.2004. 11:49 ] @
neki uslov
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();
}

....

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".
[ filmil @ 04.07.2004. 13:52 ] @
Ova poruka je odlutala od teme: http://www.elitesecurity.org/poruka/269887