Gå til innhold

Fortsette gjennom kode, mens uendelig løkke kjører


Anbefalte innlegg

Hei,

 

Jeg et program hvor ett av panelene i GUI-vinduet hele tiden lytter til endringer i en database og viser dem hvis de oppstår.

 

Dette har jeg gjort vha en uendelig løkke, som med jevne mellomrom sjekker etter endringer:

 

while(true) {
  sjekker igjen...
  venter 10 sekunder...
}

mer kode...

 

Men her stopper jo også programmet mitt, siden denne løkken fortsetter i det uendelige.

 

Derfor lurer jeg på: Hvordan kan jeg fortsette å kjøre resten av programmet, mens denne while-løkken står og kjører?

 

Er løsningen å bruke Threads, eller finnes det en annen elegant måte?

Lenke til kommentar
Videoannonse
Annonse
Hei,

 

Jeg et program hvor ett av panelene i GUI-vinduet hele tiden lytter til endringer i en database og viser dem hvis de oppstår.

 

Dette har jeg gjort vha en uendelig løkke, som med jevne mellomrom sjekker etter endringer:

 

while(true) {
  sjekker igjen...
  venter 10 sekunder...
}

mer kode...

 

Men her stopper jo også programmet mitt, siden denne løkken fortsetter i det uendelige.

 

Derfor lurer jeg på: Hvordan kan jeg fortsette å kjøre resten av programmet, mens denne while-løkken står og kjører?

 

Er løsningen å bruke Threads, eller finnes det en annen elegant måte?

6492352[/snapback]

 

Må starte en ny tråd som poller db og oppdaterer modellen ved evt. endringer, ja.

 

Du kan bruke Thread direkte (i.e. lage en ny klasse som implementerer Runnable og har en tråd som instansvariabel) eller evt. bruke Timer + TimerTask klassene.

 

Husk å trigge en XXXDataChanged -event når du er ferdig med modellen, slik at gui'et kan tegne seg opp på nytt. Bør nok tenke på synkronisering og, i tilfelle brukeren gjør endringer samtidig med at db-innholdet endres.

Lenke til kommentar
Hvis du har et persistens-API kunne du lagt inn en interceptor mellom APIet og implementasjonen som fyrer av DataChanged-eventet etter at en eventuell create/update/delete-metode er kalt. Da slipper du å ha en egen tråd med en evig løkke.

6493399[/snapback]

Er vel endringer utenfra OP er interessert i..?

 

 

Og selvsagt ingen grunn til å lage en evig løkke, må jo kunne stoppe tråden òg.

Eks. (ikke testet..):

 

class MyWorker implements Runnable {
 private volatile Thread tr = null;

 public void start() {
   tr = new Thread(this);
   tr.start();
 }

 public void stop() {
   Thread t = tr;
   tr = null;
   t.interrupt();
 }

 public void run() {
   while (tr == Thread.currentThread()) {
     if (timeToDoStuff()) {
       doStuff();
     }
     try {
       sleep(2000);
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
 }

}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...