06.27.07
Thread-uri în Java
Iată-mă-s ajuns şi la capitolul Thread . Nevoia!
Fac o aplicaţie care trebuie să fie şi client şi server; şi care trebuie să comunice cu un automat programabil. Programatorii de la firma Moeller, care au pus bazale unei comunicaţii prin protocolul UDP, printr-un cablu de reţea, au realizat/programat o funcţie care “citeşte” port-ul specificat şi returnează o variabilă TRUE/FALSE, funcţie dacă a găsit date pe acel port. Programul nu se blochează, el rulează ciclic.
Pe PC nu se întâmplă tot aşa. Un program care “ascultă” un port, se “blochează” în acea funcţie care recepţionează mesajele.
Aşa şi în Java. Odată pornită funcţia de “receive”, ea “blochează” practic derulerea în continuare a programului. “De-blocarea” programului, practic trecerea de funcţia “receive”, se face doar atunci când pe portul specificat, s-au recepţionat nişte date. Dar dacă, în acest timp - de ascultare, vrei să trimiţi nişte date, programul este blocat, în aşteptarea unor date.
O primă soluţie, dar inconvenabilă pentru aplicaţia mea, ar fi 2 programe: unul să transmită şi celălalt să recepţioneze. Nu se poate adopta o astfel de soluţie deoarece trebuie o singură aplicaţie. Practic, aplicaţia se vrea o simulare a funcţionării unei staţii de fabricare a betonului. Şi acest lucru se face într-o strânsă comunicare bi-direcţională cu PLC-ul.
Soluţia optimă este, ca din programul principal (aplicaţia de simulare), să se execute un Thread, care să “asculte” portul dorit. Din aplicaţia Thread se pot schimba valorile unor variabile din aplicaţia principală, prin simpla lor declarare ca fiind de tip static.
Odată rezolvată problema comunicării bi-direcţionale, trebuie să merg mai departe şi să proiectez/programez tot restul aplicaţiei de simulare.
Works for me!!!