# verzögerung in einer methode



## MQue (21. Mai 2007)

Hallo,


ich habe folgendes Problem: wenn ich eine Button drücke wird in meinem Programm eine Methode aufgerufen. diese Methode sendet einen Buffer über die serielle Schnittstelle zu einem anderen Computer.
Mein Problem ist jetzt, dass in der Methode gewartet werden muss, bis ein Flag 0 ist, dann darf erst geschrieben werden. 

Wie kann ich das am besten machen, dass das Programm normal weiterläuft und nur in der MEthode unten eben gewartet wird?

Lg
Michl





```
private boolean flag = 0;
 ...

 public static void writeToRemote()
        {   
        // warten, bis Flag 0 ist und dann erst schreiben  
        SerielleSchnittstelle.write(buf);                               
        }
```


----------



## Tellerrand (21. Mai 2007)

Thread ist das Stichwort:
http://www.galileocomputing.de/openbook/javainsel6/javainsel_09_001.htm


----------



## EOB (21. Mai 2007)

flag ist doch 0...oder wie? aber ich würde sagen, wenn es 'parallel' laufen soll, kannst du nen thread nehmen....

grüße


----------



## MQue (21. Mai 2007)

nein flag ändert sich (...)
ich weiß nicht genau, wie ich den Thread in meine Methode einbauen soll,
Wie kann ich das dem Thread sagen, dass er erst schreiben soll wenn flag == 0 ist?

lg und Danke
Michl




```
private boolean flag = 0;
...

public static void writeToRemote()
        {   
        wenn flag == 0 ist dann:
        SerielleSchnittstelle.write(buf);                               
        }
```


----------



## EOB (21. Mai 2007)

also du musst eben deine methode in dem thread aufrufen...schau dir das mal an. ich seh das doch richtig?

- dein programm läuft, irgendwann ist flag == 0
- dann soll die methode parallel zum programm starten und was tun

korrekt?

grüße


----------



## MQue (21. Mai 2007)

ja genau!!


----------



## EOB (21. Mai 2007)

ja dann ist das doch recht einfach: also so:




```
class WriteThread extends Thread {
        
        public void run() {
            SerielleSchnittstelle.write(buf);
        }
}
```


```
if(flag==0){
        Thread thread = new WriteThread();
        thread.start();
}
```

so sollte es gehen, wenn ich dich recht verstanden habe.

grüße


----------



## Leroy42 (21. Mai 2007)

Die Abfrage ob flag gleich 0 ist, muß natürlich in die run-Methode mit rein.

Wo wird denn flag geändert? Außerhalb der run-Methode?


----------



## EOB (21. Mai 2007)

das ist natürlich die frage....ich dachte, es wird ausserhalb geändert.

grüße


----------



## Leroy42 (21. Mai 2007)

Also so um unnötige CPU-Last zu vermeiden:

```
public void run() { 
  while (flag != 0) {
    try {Thread.sleep(1000);} catch(InterruptedException e) {}
  serielleSchnittstelle.write(buf); 
}
```


----------



## MQue (21. Mai 2007)

Dankeschön

lg


----------

