von Kommandozeile lesen/Abbruch nach bestimmter Zeit

Alles rund um die Programmierung mit Qt
Antworten
urwald
Beiträge: 2
Registriert: 28. Februar 2009 23:43

von Kommandozeile lesen/Abbruch nach bestimmter Zeit

Beitrag 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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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...
urwald
Beiträge: 2
Registriert: 28. Februar 2009 23:43

Beitrag 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
Antworten