Avatar billede dsj Nybegynder
28. marts 2002 - 13:19 Der er 5 kommentarer og
1 løsning

Styring af tråde

Nogen der ved hvordan man styrer tråde i almindelighed. Jeg har dog et konkret problem her:

På en JList kan man vælge ét element. Når man har valgt et element starter en tråd, som bare kører i al evighed. Hvis man vælger et andet element stopper denne tråd og en anden går i gang; det kan jeg finde ud af. Men hvis man kommer til at vælge det samme element to gange i træk, har jeg lige pludselig to tråde til at køre. Det kan nemlig lade sig gøre bestemte steder at genvælge et element på JList.

Hvordan sørger jeg så for, at der kun kører én tråd hele tiden og hvordan holder jeg generelt styr på mine tråde?? Hvordan kan jeg henvise til dem?
Avatar billede greybeard Nybegynder
28. marts 2002 - 13:58 #1
http://java.sun.com/j2se/1.4/docs/api/java/lang/Thread.html

Tråde er et noget omfattende emne.
Lad os se noget kode til dit konkrete problem
Avatar billede dsj Nybegynder
28. marts 2002 - 14:41 #2
jList_valueChanged(...) {
  ...
  genInfo(selctedServer);
}

public void getInfo(Server s) {
  if (s != null) {
    ControlInfo controlInfo = new ControlInfo(this, s);
    Thread t1 = new Thread(controlInfo);
    t1.start();
  }
}

public class ControlInfo implements Runnable {
  Mainframe f;
  Server s;
  ...(konstruktør)

  public void run() {
    while (s == f.selectedServer) {
      try {
        Thread serverInfo = new Thread (new Info(f, s));
        serverInfo.start();
        serverInfo.sleep(1000);
      } catch (InterruptedException iexc) { }
    }
  }
}

while-sætningen gør, at hvis der i Mainframe f vælges en anden server end den, der arbejdes på i denne tråd, stoppes den.

public class Info implements Runnable {
  Mainframe f;
  Server s;
  ...
  public void run() {
    //Nogle informationer hentes fra en server
    //og nogle labels på f sættes til disse informationer.
  }
}

controlInfo-tråden dræber kun sig selv, hvis en anden server (selectedServer) vælges i Mainframe f - fint nok. Men hvis man kommer til på en eller anden vis at vælge samme server igen, startes der endnu en controlInfo-tråd og det er ikke meningen - jeg vil kun have én kørende hele tiden.

Hvis ikke jeg har controlInfo-tråden til at køre, kan jeg ikke få info-tråden til at gentage sig.

Håber det giver mening.
Avatar billede dsj Nybegynder
28. marts 2002 - 15:06 #3
Nåh ja, og de to første metoder: jList_valueChanged og getInfo er selvfølgelig placeret i Mainframe f.
Avatar billede greybeard Nybegynder
28. marts 2002 - 16:36 #4
I din while løkke starter du nye tråde op i en uendelighed.
Hvad er ideen i det?
Avatar billede greybeard Nybegynder
28. marts 2002 - 16:48 #5
I stedet for at starte en ny tråd op, hver gang du skifter server, så lav din ControlInfo til en Singleton og lav en set metode til s, i stedet for at angive den i constructoren.
Avatar billede dsj Nybegynder
29. august 2002 - 07:07 #6
LOLDA, Dette spørgsmål har jeg da glemt alt om, også om dit svar hjalp noget :D
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester