Avatar billede pnr Nybegynder
09. april 2003 - 07:19 Der er 21 kommentarer og
1 løsning

Spørgs mål ang tråde

Jeg har en funktion i min GUI som laver en søgning som kan tage op til 2-3 min, mens denne funkrion søger er min GUI låst. Jeg kunne godt tænke mig at få det lavet så der i guien heletiden bliver opdateret med resultater, og samtid at den ikke er låst så man evt. kan stoppe søgningen igen. her havde jeg taænkt at man måske skulle bruge tråde, men hvordan laver jeg dette? Jeg har en GUI, en Controller og en Klasse der laver søgningen.
Avatar billede arne_v Ekspert
09. april 2003 - 07:24 #1
Skal du have hjælp til hvordan man starter en tråd eller
nogle mere konkrete ideer til din specifikke problem-stilling.
Avatar billede pnr Nybegynder
09. april 2003 - 07:59 #2
Ja vil det ikke hjælpe at lave Klassen der laver søgningen som en tråd, som så bare videre giver resultaterne til GUI efterhånden som de bliver fundet. Er der nogle problemmer med det umildbart? Og så kan jeg ikke huske hvordan jeg laver den tråd.
Avatar billede arne_v Ekspert
09. april 2003 - 08:22 #3
En tråd er nem at lave:

public class X extends Thread {
  public X(...) {
  }
  public void run() {
      ...
  }
  ...
}

X x = new X();
x.start();
Avatar billede arne_v Ekspert
09. april 2003 - 08:24 #4
Jeg er ikke den store GUI ørn, men umiddelbart lyder
det OK at lave søgningen i en tråd der løbende opdaterer.

Du skal så nok have en referance til din GUI del med over i trådens
constructor.
Avatar billede arne_v Ekspert
09. april 2003 - 08:25 #5
Det vil dog ikke hjælpe hvis søgningen har karakterristika
som stå og søg i 2-3 minutter og returnerer X hits lyn hurtigt.
Avatar billede pnr Nybegynder
09. april 2003 - 08:45 #6
Hvad mener du med den sidste kommentar du skrev?
Avatar billede arne_v Ekspert
09. april 2003 - 08:50 #7
Det er helle rikke helt rigtigt hvad jeg skrev.

Det vil under alle omstændigheder hjælp emed en tråd derved at man
kann cancle søgning etc..

Men tråden vil virke noget bedre visuelt hvis det er:
  vent 10 sek.
  vis første record
  vent 10 sek.
  vis anden record
  ...
  vent 10 sek.
  vis tyvende record

end med:
  vent 3 minutter
  vis første record
  vis anden record
  ...
  vis tyvende record

og det afhænger lidt af selve søgningens karakteristika.
Avatar billede pnr Nybegynder
09. april 2003 - 09:42 #8
Hvis jeg har en reference til GUI kan jeg vil bare skrive når tingene er fundet.
eks. første post fundt GUI.vispost(/et eller andet/);
Anden post fundet GUI.vispost(/et eller andet/);
OSV.

Det var måske også det du mente?
Avatar billede arne_v Ekspert
09. april 2003 - 09:52 #9
Hvis nu din GUI klasse hedder MyGUI så kan du:

public class X extends Thread {
  private MyGUI mg;
  public X(MyGUI mg) {
      this.mg = mg;
  }
  public void run() {
      ...
      mg.dowhatever();
      ...
  }
  ...
}

X x = new X(this);
x.start();
Avatar billede arne_v Ekspert
11. april 2003 - 22:44 #10
Er du kommet videre ?
Avatar billede pnr Nybegynder
15. april 2003 - 08:50 #11
Jeg har ikke haft tid til at kigge mere på det, men smid et svar så du kan få nogle point for dine mange hjælpende ord.
Avatar billede arne_v Ekspert
15. april 2003 - 08:54 #12
ok
Avatar billede pnr Nybegynder
20. april 2003 - 08:40 #13
Nu har jeg fåetlavet søgningen i en tråd, og min GUI bliver også opdateret med resultater fra søgningen (nogen af dem). Men min GUI er stadig låst jeg kan ikke stoppe søgningen med en knap. Hvad kan der være galt?
Avatar billede arne_v Ekspert
20. april 2003 - 08:49 #14
SVært at sige - kan du poste lidt kode fragmenter ?
Avatar billede pnr Nybegynder
20. april 2003 - 10:26 #15
Jeg kan lige kort forklare hvordan jeg har opbygget det.

  |Søg|-->|Fælles søg|-->|Data*|
    ^
    |
|controller|-->|GUI|
    |
  |Data| 

Jeg har en controller (MVC) som opretter GUI, Søg(er en tråd) og Data som er et object til at få de fundne resultaterne over i GUI (Obesrver mønstret).

Jeg ved ikke om du kan konkludere noget af dette, ellers må jeg prøve at specificere det nærmere.
Avatar billede pnr Nybegynder
20. april 2003 - 10:27 #16
* Data er det samme object de 2 steder den er vist
Avatar billede arne_v Ekspert
20. april 2003 - 10:51 #17
Jo.

Men det er ikke så meget din overordnede struktur.

Det er mere helt præcist hvordan søge tråden og GUI'en spiller
sammen.

Hvis du ikke har lyst til at poste tusindvis af linier her, så
kan du evt. emaile koden til mig.
Avatar billede pnr Nybegynder
20. april 2003 - 11:12 #18
Controlleren opretter søgetråden:

SøgeTråd st = new Søgetråd(kriterie,data);
st.setPriority(Thread.NORM_PRIORITY-2);
st.run();

Den sender et data object med til søgetråden. I dette data object skriver jeg hvergang der er fundet en post, da data objectet nedarver Obeservable, og GUI er tilmeldt data objectet (observer) får den besked hvergang der skrevet i data objectet, og kan derefter hente den nye værdi i data objectet. Og alt dette virker fint, jeg kan bare ikke trykke på nogen knapper mens der søges.
Avatar billede arne_v Ekspert
20. april 2003 - 11:30 #19
Hov så tror jeg vi er på sporet.

Du skal ikke kalde st.run() - du skal kalde st.start() !

(så startes tråden og din run metode bliver kaldt i tråden)
Avatar billede pnr Nybegynder
20. april 2003 - 11:55 #20
Ja nu virker det hele meget bedre!!

Tusind tak arne_v vil du ikke have lidt point for det, så laver jeg lige et spørgsmål du kan smide et svar på?
Avatar billede arne_v Ekspert
20. april 2003 - 11:57 #21
Jo tak.
Avatar billede pnr Nybegynder
20. april 2003 - 12:36 #22
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