Resenje za tvoje muke se zove multithreading.
Treba da kreiras dva tzv. worker thread-a, jedan da nadgleda pristigle poruke (nazovimo
ga receive thread), drugi da opsluzuje poslate poruke (nazovimo ga send thread) i da ih salje niz mrezu.
Mali problem je kontakt ovih thread-ova sa GUI-jem. Samo glavni thread (main thread)
moze da pristupa GUI elementima.
Kako bi izgledao dizajn koda:
Trebaju ti definicije za dve custom-poruke, naprimer:
Code:
#define WM_RECEIVED_DATA (WM_USER+1)
#define WM_SENDING_DATA (WM_USER+2)
Kad god receive thread primi podatke, on salje custom-definisanu poruku glavnom
thread-u, i to treba da ih salje asinhrono, samo upisujuci poruku u message loop, bez
da ceka da se poruka opsluzi. Za ovu svrhu koristi PostMessage( ) funkciju. Glavna
aplikacija treba da ima handler (ON_COMMAND(WM_RECEIVED_DATA....).
Kad korisnik nesto ukuca u svoj edit box, glavni thread na to reaguje svojim handlerom
za taj edit box, skida podatke sa edit box-a i smesta ga u neki unapred rezervisani
buffer u memoriji. Odmah potom, salje custom-definisanu poruku send thread-u, takodje
koristeci PostMessage( ) funkciju.
Za razliku od receive thread-a, send thread mora da ima aktiviranu message pumpu,
koja je vec ugradjena, samo je treba eksplicitno aktivirati.
Ako nemas iskustva sa thread-ovima, kukaj naglas, pa cemo korak po korak da resimo
problem.