Hallo,
ich habe mal eine recht allgemein gefasste Frage, zu der ich beim besten Willen keine konkrete Aussage bekomme.
Kann ich einem beliebigen Befehl irgendwie mit erhöhter Priorität aufrufen, damit er sofort ausgeführt wird, bevor alles andere passiert?
Hintergrund anhand eines Beispiels:
Angenommen ich habe ein laufendes Programm. Eins zwei Threads laufen bereits, die z.B. irgendwelche Uhrzeiten laufen lassen oder wie in meinem Fall ständig eine Gerätetemperatur abfragen und ausgeben. Irgendwo hab ich dann noch ein Panel offen, wo z.B. immer bei Mausklick ein Punkt an der Stelle des Klicks erscheinen soll.
Also sowas hier:
Der Mauspunkt wird dann in der repaint aufgerufen, zusätzlich geb ich ihn noch aus. Ob nun mit mousePressed oder mouseClicked tut in dem Fall nichts zur Sache.
So, nun folgendes: Wahrscheinlich weil der Rechner noch mit den zwei anderen Threads beschäftigt ist, fragt er die Mausposition nicht sofort ab und mein Punkt landet irgendwo anders, wenn ich während des Klickens weiterrutsche. Irgendwo, wo die Maus dann steht oder vorbeigestriffen ist. Das soll natürlich nicht passieren.
So, nun gibt's ja die Threadprioritäten. Die Priorität ist natürlich nicht relativ zu einem einfachen Befehl (obgleich dieser ja "relativ zum Thread" auch nebenläufig abgearbeitet wird). Soll die Lösung nun sein, einen einzelnen Befehl in einen Thread zu packen, der eine hohe Priorität bekommt? (Code spar ich mir. Halt einfach nen Thread erstellen, Priorität setzen und an der gewünschten Stelle starten)
1. Ist das überhaupt sinnvoll bzgl. des Aufwands den erst zu erstellen?
2. Wenn ein einziger Befehl in dem Thread ausgeführt wird, dann kann ich ihn ja nicht wieder starten. Stoppen von Threads ist eh ein leidiges Thema. Sprich, ich kann diesen Thread eh grad nur 1x starten. Dauerhaft soll er ja nicht laufen, sondern nur beim Event.
Also, gibt es irgendwie such ich ne Möglichkeit einen Befehl einfach sofort auszuführen, egal, was nebenher läuft.
ich habe mal eine recht allgemein gefasste Frage, zu der ich beim besten Willen keine konkrete Aussage bekomme.
Kann ich einem beliebigen Befehl irgendwie mit erhöhter Priorität aufrufen, damit er sofort ausgeführt wird, bevor alles andere passiert?
Hintergrund anhand eines Beispiels:
Angenommen ich habe ein laufendes Programm. Eins zwei Threads laufen bereits, die z.B. irgendwelche Uhrzeiten laufen lassen oder wie in meinem Fall ständig eine Gerätetemperatur abfragen und ausgeben. Irgendwo hab ich dann noch ein Panel offen, wo z.B. immer bei Mausklick ein Punkt an der Stelle des Klicks erscheinen soll.
Also sowas hier:
Java:
public void mousePressed(MouseEvent arg0) {
mousePoint = MouseInfo.getPointerInfo().getLocation();
repaint();
System.out.println(mousePoint);
}
So, nun folgendes: Wahrscheinlich weil der Rechner noch mit den zwei anderen Threads beschäftigt ist, fragt er die Mausposition nicht sofort ab und mein Punkt landet irgendwo anders, wenn ich während des Klickens weiterrutsche. Irgendwo, wo die Maus dann steht oder vorbeigestriffen ist. Das soll natürlich nicht passieren.
So, nun gibt's ja die Threadprioritäten. Die Priorität ist natürlich nicht relativ zu einem einfachen Befehl (obgleich dieser ja "relativ zum Thread" auch nebenläufig abgearbeitet wird). Soll die Lösung nun sein, einen einzelnen Befehl in einen Thread zu packen, der eine hohe Priorität bekommt? (Code spar ich mir. Halt einfach nen Thread erstellen, Priorität setzen und an der gewünschten Stelle starten)
1. Ist das überhaupt sinnvoll bzgl. des Aufwands den erst zu erstellen?
2. Wenn ein einziger Befehl in dem Thread ausgeführt wird, dann kann ich ihn ja nicht wieder starten. Stoppen von Threads ist eh ein leidiges Thema. Sprich, ich kann diesen Thread eh grad nur 1x starten. Dauerhaft soll er ja nicht laufen, sondern nur beim Event.
Also, gibt es irgendwie such ich ne Möglichkeit einen Befehl einfach sofort auszuführen, egal, was nebenher läuft.