24. januar 2005 - 09:12Der er
4 kommentarer og 1 løsning
Tråd programmering, konceptuelt spørgsmål
Hejsa.
Jeg har et tråd objekt , T1, der lytter på en buffer. Denne buffer består af en modtage kanal samt en sende kanal, og er blot to fifoer der skal simulere en hardware-buffer med to kanaler. I den anden ende af systemet har jeg endnu en tråd, T2, der henter og sender data over netværk via en socket forbindelse. Imellem disse to tråde har jeg et static klasse CC, der kender de to nævnte tråde. Situationen ser således ud: rx/tx buffer <-> T1 (tråd) <-> CC (static) <-> T2 (tråd) <-> network
Når T2 modtager data kalder den en metode i CC og sender en pointer til den modtagne data med. CC behandler denne data og skal nu sende en besked (eller data) til bufferen. Kan dette gøres gennem tråden T1? sagt på en anden måde, kan CC kalde en metode i T1 (som jo er en tråd med sit eget liv), uden at dette konceptuelt er forkert? Man kan sikkert sagtens men er dette godt design? sætter pris på lidt input :) ps. overvejer at sætte endnu en fifo mellem T1 og CC. så kan T1 lytte på bufferen og fifoen på skift. Dette er pænt, men vil også gøre det hele noget langsommere.... input tak :)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
lav 2 funktioner i din statiske klasse, en son T2 bruger til at lægge data, og en som T1 bruger til at hente data.
Du skal så også sørge for at de to tråde ikke roder rundt i de data samtidig med hinanden, det kan fx gøres med en semafor:
static class S {
private bool semafor = false; // false betyder 'klar til at modtage data' // true betyder 'klar til at afgive data' private int data1; private float data2: // osv de data der skal overføres
boolean indsætData( int data1, int data2, ... ) { // må kun kaldes af T2 while( semafor ) { // data kan ikke indsættes nu wait( 30 ); // vent på at T1 kommer og tømmer } // nu ved vi det er OK at indsætte data S.data1 = data1 S.data2 = data2 // osv semafor = true; // nu har jeg indsat data }
ArrayList hentData() { while( !semafor ) { // data kan ikke henttes nu wait( 30 ); // vent på at T2 kommer og fylder } ArrayList resultat = new ArrayList() resultat.add( New Integer( S.data1 ) ); resuktat.add( New Float( S.data2 ) ); // osv semafor = true; // nu har jeg hentet data. }
ok ja smart nok. I Den løsning du har lavet her, er det tråden T1 der henter fra CC. Mit spørgsmål var faktisk om det omvendte var tilladt konceptuelt, eller om det er dårlig programmering? situationen er altså : T1 bruger sit liv på at viderensende data fra buffer til CC. Men når CC modtager data fra T2 bruger den en metode i T1 til at tilføje data til bufferen. Så behøver de ikke at "mødes" ligesom du har foreslået eller mit ps antydede. mit ps og din løsning er jo i teorien samme tankegang, og det ville bare passe mig bedst at undgå dette...
tak for kommentaren iøvrigt. jeg er ikke specielt ude efter kode, så¨det behøver i ikke at besvære jer med...kun ude efter et svar på et sikkert dumt spørgsmål. Er det dårlig programmering? (for det kan jo sagtens lade sig gøre :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.