snoopysalive
Mitglied
Hallo!
Kann mir jemand eine Page empfehlen, auf der genau beschrieben wird, wie man Multithreading unter SWT realisiert?
Konkret habe ich folgendes Problem:
Ich habe mir einen Verkehrsmelder programmiert, der sich nach einer angegebenen Zeit updatet.
Von Swing her bin ich es gewöhnt, dieses Schleifenkonstrukt einfach in einen Thread zu pumpen und schon bleibt die Benutzeroberfläche selbst bei länger andauernden Arbeiten stets bedienbar.
Unter SWT benutze ich hierfür ein Runnable, das ich mit Display.asyncExec() ausführe und das sich per Display.timerExec() nach Ablauf einer Minute rekursiv selbst ausführt. Das sieht dann in etwa so aus:
Das funktioniert auch, nur scheint es so, nur ist die GUI nicht benutzbar, solange das Update ausgeführt wird. Soll heißen: Wenn ich das Programm per Klick auf X oder auf einen entsprechenden Button auf der GUI schließen möchte, wird dieser Befehl erst ausgeführt, nachdem das Update durchgeführt wurde.
Das kenne ich so nicht von Swing und widerspricht eigentlich dem, was ich mir unter asynchroner Ausführung vorstelle. Eigentlich sollte die GUI durch das Mutlithreading ja dazu in der Lage sein, geschlossen zu werden, während das Update läuft.
Vielleicht versteh ich da ja was falsch, aber wenn da jemand meinen Knoten lösen oder mir zumindest eine gute Tutorial-Page empfehlen kann, wäre ich sehr dankbar.
Gruß,
Matthias
Kann mir jemand eine Page empfehlen, auf der genau beschrieben wird, wie man Multithreading unter SWT realisiert?
Konkret habe ich folgendes Problem:
Ich habe mir einen Verkehrsmelder programmiert, der sich nach einer angegebenen Zeit updatet.
Von Swing her bin ich es gewöhnt, dieses Schleifenkonstrukt einfach in einen Thread zu pumpen und schon bleibt die Benutzeroberfläche selbst bei länger andauernden Arbeiten stets bedienbar.
Unter SWT benutze ich hierfür ein Runnable, das ich mit Display.asyncExec() ausführe und das sich per Display.timerExec() nach Ablauf einer Minute rekursiv selbst ausführt. Das sieht dann in etwa so aus:
Java:
Runnable thread = new Runnable() {
public void run() {
if (!shell.isDisposed()) {
/* do something */
display.timerExec(60000, this);
}
}
};
display.asyncExec(thread);
Das funktioniert auch, nur scheint es so, nur ist die GUI nicht benutzbar, solange das Update ausgeführt wird. Soll heißen: Wenn ich das Programm per Klick auf X oder auf einen entsprechenden Button auf der GUI schließen möchte, wird dieser Befehl erst ausgeführt, nachdem das Update durchgeführt wurde.
Das kenne ich so nicht von Swing und widerspricht eigentlich dem, was ich mir unter asynchroner Ausführung vorstelle. Eigentlich sollte die GUI durch das Mutlithreading ja dazu in der Lage sein, geschlossen zu werden, während das Update läuft.
Vielleicht versteh ich da ja was falsch, aber wenn da jemand meinen Knoten lösen oder mir zumindest eine gute Tutorial-Page empfehlen kann, wäre ich sehr dankbar.
Gruß,
Matthias