[ 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". |