shutdown
Erfahrenes Mitglied
Hi!
Ich hätte eine Frage zu einem meiner Codes.
Und zwar habe ich ein Suchfeld wie im Thunderbird geschrieben, das die Eingaben entgegen nimmt und sobald die Eingabe abgeschlossen ist, sofort die zugrunde liegende Tabelle aktualisiert.
Hier mal ein paar Code-Ausschnitte - die Frage kommt dann danach:
Das Suchfeld ist eine eigene Klasse - hier ein Ausschnitt aus dem Konstruktor:
Zur Erklärung: Das Suchfeld schickt das Signal zum aktualisieren erst, wenn seit der letzten Eingabe 200 ms zurückliegt. Wenn's zu lange dauert, dann legt sich der Thread wieder schlafen um das System zu entlasten.
Wenn sich am Suchfeld was ändert - z.B. was eingegeben wird:
dann wird der Thread wieder aufgeweckt und das Spiel geht von vorne los.
Nun meine Frage/Problem:
Gibt es da eine elegantere Lösung?
Problem ist nämlich, dass ich diese 200 ms durch Ausprobieren und Herantasten an eine typische Schreibgeschwindigkeit herausgefunden habe.
Es gibt jetzt aber hin und wieder den Fall, dass genau eine Geschwindigkeit getroffen wird, bei der nicht die gesamte Eingabe tatsächlich auch übermittelt wird, weil der Thread schon wieder schläft, aber nicht mehr mit aufgeweckt wird.
Vielen Dank
shutdown
Ich hätte eine Frage zu einem meiner Codes.
Und zwar habe ich ein Suchfeld wie im Thunderbird geschrieben, das die Eingaben entgegen nimmt und sobald die Eingabe abgeschlossen ist, sofort die zugrunde liegende Tabelle aktualisiert.
Hier mal ein paar Code-Ausschnitte - die Frage kommt dann danach:
Das Suchfeld ist eine eigene Klasse - hier ein Ausschnitt aus dem Konstruktor:
Code:
this.getDocument().addDocumentListener(this);
updateInvoker = new Thread() {
public void run() {
while(true) {
/**
* Wenn die letzte Änderung länger als 200 msek zurückliegt, Update übermitteln.
*/
if(lastChange != 0) {
if(System.currentTimeMillis() - lastChange > 200) {
// aktualisieren
}
}
/**
* Wenn die letzte Änderung länger als 750 msek zurückliegt, diesen Thread schlafen legen.
*/
if(System.currentTimeMillis() - lastChange > 750) {
lastChange = 0;
this.suspend();
}
}
}
};
updateInvoker.start();
updateInvoker.suspend();
Zur Erklärung: Das Suchfeld schickt das Signal zum aktualisieren erst, wenn seit der letzten Eingabe 200 ms zurückliegt. Wenn's zu lange dauert, dann legt sich der Thread wieder schlafen um das System zu entlasten.
Wenn sich am Suchfeld was ändert - z.B. was eingegeben wird:
Code:
public void insertUpdate(DocumentEvent arg0) {
lastChange = System.currentTimeMillis();
updateInvoker.resume();
}
dann wird der Thread wieder aufgeweckt und das Spiel geht von vorne los.
Nun meine Frage/Problem:
Gibt es da eine elegantere Lösung?
Problem ist nämlich, dass ich diese 200 ms durch Ausprobieren und Herantasten an eine typische Schreibgeschwindigkeit herausgefunden habe.
Es gibt jetzt aber hin und wieder den Fall, dass genau eine Geschwindigkeit getroffen wird, bei der nicht die gesamte Eingabe tatsächlich auch übermittelt wird, weil der Thread schon wieder schläft, aber nicht mehr mit aufgeweckt wird.
Vielen Dank
shutdown