Seite 1 von 1

von Kommandozeile lesen/Abbruch nach bestimmter Zeit

Verfasst: 1. März 2009 14:23
von urwald
Hallo.

Ich schreibe ein Frontend für ein Kommandozeilenprogramm (Streamripper). Bei jedem Start soll das Frontend die Versionsnummer von Streamripper überprüfen. Das geht mit dem Kommando "streamripper -v".

Allerdings kann in den Einstellungen des Frontends der Pfad zum Streamripper-Programm vom Benutzer frei eingestellt werden. Das heißt, er könnte auch so etwas unsinniges wie "gs" oder "mc" eingeben. In diesem Fall würde sich das aufgerufene Programm ja ohne weitere Eingaben nicht so schnell wieder beenden. Also hatte ich die Idee, das Programm im Zweifelsfall einfach mit QProcess::kill() nach Ablauf von 1 Sekunde abzubrechen.

Ein Abbruch nach einer festen Zeit hat aber einen großen Nachteil: Wenn der Computer beim Start des Frontends unter Volllast läuft (was z.B. dann wahrscheinlich ist, wenn das Frontend automatisch beim Anmelden gestartet wird), dann könnte die Ausgabe von Streamripper auf sich warten lassen, und zwar länger als 1 Sekunde. Wenn ich das Zeitlimit aber erhöhen würde (beispielsweise auf 30 Sekunden), dann müsste bei jedem Programmstart so lange gewartet werden, falls keine vernünftige Ausgabe von Streamripper zurückkommt.

Gibt es eine Möglichkeit, dem Streamripper-Programm einfach soundsoviele Prozessorzyklen zuzubilligen (unabhängig davon, wie lange das dauert), bevor es gekillt wird? Oder wisst ihr eine andere gute Lösung?

Tim

Verfasst: 1. März 2009 14:46
von solarix
Eine technische Lösung kann ich dir nicht bieten (ich weiss nicht, wie man SYS/USER/REAL-Time plattformunabhängig zur Laufzeit auslesen könnte). Aber IMHO ist das ein typischer "Garbage In -> Garbage Out"-Fall... mit anderen Worten: es ist immer möglich, ein Programm mit komplettem Müll zu füttern..aber dann kommt halt auch Schwachsinn dabei raus. Ein Programm soll lediglich robust auf Fehler reagieren (Sinnvolle Meldungen... im schlimmsten Fall ein einigermassen eleganter Abgang).

Mit anderen Worten: ich würde ein sinnvoller Timeout einbauen (z.B. 5s.. halt einfach so, dass der Start in 90% aller Fälle auch bei hoher Last gelingt) und danach abbrechen. Falls du das ganze Vergolden möchtest, kannst du ja immer noch den Timeout konfigurierbar machen (ini-File oder Programmargument) oder nach Ablauf des Timeouts eine Frage wie "Timeout -> wollen sie weiter warten?" stellen, so dass Besitzer wirklich langsamer Rechner auch eine Chance haben..

hth...

Verfasst: 1. März 2009 21:41
von urwald
Ja, das wird wohl das beste sein. Der Fall wird eh sehr, sehr selten eintreten - und wenn der User nicht selbst was an den Einstellungen geändert hat, dann gar nicht. Ich glaube, ich nehm' einen festen Timeout und biete vielleicht eine Nachfrage an, ob man noch länger warten will.

Danke.

Tim