Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm anhalten ohne Thread
Hallo Leute,
ist es möglich, für eine Zeitspanne (200ms) die Ausführung eines Java-Programmes anzuhalten, ohne eine Thread bemühen zu müssen? Also so was wie das Pascal'sche wait?
so long,
BlueJay
peschmae
19-08-2007, 10:40
Thread.sleep(200);
Funktioniert auch ohne (mehrere) Threads. Oder anders gesagt: Das Ding was da normalerweise läuft ist ein Thread.
MfG Peschmä
Aber Achtung: Kann ne exception werfen :D
MfG Bischi
Aber Achtung: Kann ne exception werfen :D
MfG Bischi
Also doch besser die ganze "Abfangstation" wieder einbauen! :mad:
so long,
BlueJay
Also doch besser die ganze "Abfangstation" wieder einbauen! :mad:
Selbstverständlich - dafür sind die Exceptions ja da. Es kann ja während des sleep Wichtiges außerhalb des Threads passiert sein (z. B. ein Signal wie SIGTERM beim Shutdown oder SIGQUIT durch Benutzereingabe), was eine InterruptedException auslöst - da sollte man schon reagieren - und z. B. aufräumen, Filehandler schließen usw. Ein Abschuss durch SIGKILL ist nun mal für jeden Prozess das Letzte, was man wünscht.
Jan
anda_skoa
20-08-2007, 00:54
Also doch besser die ganze "Abfangstation" wieder einbauen! :mad:
Das ist je kein Aufwand. Wenn du die Exception immer gleich behandeln willst, kannst du dir ja eine Utility Klasse machen:
public class WaitDammit
{
public static void sleep(long millis)
{
try
{
Thread.sleep(millis);
}
catch (InterruptedException e)
{
e.printStackTrace(System.err);
}
}
}
// wait, don't care
WaitDammit.sleep(200);
Ciao,
_
Also, wenn ich schon Exceptions abfange, will ich einen Hinweis auf die mögliche Ursache geben. Da ist es mit "Noch 'ne Klasse" nicht (immer) getan.
Ich stöhne nur deshalb, weil ich auf diese Weise schon die rms-, Image- und sonstige Klassen an meine Bedürfnisse anpassen musste.
Bisher bin ich von php und Javascript verwöhnt worden, nun muss ich wohl wieder arbeiten lernen :D
Für mich ist der obige Vorschlag derselbe Aufwand wie meine übliche Zeitschleife, nur dass ich den Thread indirekt anspreche. Also mach ich mir dann doch gleich einen Pointer drauf (ein Objekt), um ihn besser zu kontrollieren.
so long,
BlueJay
Es kann ja während des sleep Wichtiges außerhalb des Threads passiert sein (z. B. ein Signal wie SIGTERM beim Shutdown oder SIGQUIT durch Benutzereingabe)
Du meinst, der Thread verschläft den Weltuntergang und läuft danach einfach weiter? Was ist dann mit der Garbage Collection? (den Langoliers :))
so long,
BlueJay
Du meinst, der Thread verschläft den Weltuntergang und läuft danach einfach weiter? Was ist dann mit der Garbage Collection? (den Langoliers :))
Dann gewinnen die Langoliers - und Dein armes Programm wird mit Haut und Haaren gefressen ;) Spätestens wenn SIGKILL kommt, hat kein Programm mehr die Chance, sich sauber zu beenden (also rechtzeitig wieder ins Flugzeug zu steigen). Deshalb sollte man die Exception abfangen und dafür sorgen, dass es nicht zu dem traurigen Finale kommt.
Jan
EDIT: Es ist natürlich klar, dass der sleep bei einer Exception abgebrochen wird. Das Abfangen soll nur dafür sorgen, dass Dein Java-Programm in diesem Fall angemessen reagiert.
Der (Thread-)Exception (des Refresh-Loops) ruft bei mir in diesem Fall nur "FEIERABEND!" :D
Schlimmer wäre es, wenn die Langoliers nicht zuschnappen,d.h. der Feierabend verpennt wird.
Bin mit Java als Betriebssystem noch nicht so vertraut, es fällt mir schwer, zu glauben, dann man sich (angeblich) nicht ums Aufräumen (belegte Ressourcen wieder freigeben) kümmern muss.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.