Wie kann ich die in einem bestimmten Abschnitt eines Perl-Skripts verbrachte Zeit begrenzen?

7

Gibt es eine Möglichkeit, einen Zeitzähler zu erstellen, mit dem Teile eines Skripts so lange ausgeführt werden können, wie es funktioniert? Zum Beispiel habe ich den folgenden Code:

%Vor%

Theoretisch möchte ich diese Schleife für 3 Minuten laufen lassen, selbst wenn die Schleifenanweisungen noch nicht beendet sind, sollte sie nach genau 3 Minuten noch aus der Schleife ausbrechen.

Tatsächlich öffnet das Programm ein Zeitzählerfenster, das parallel zu einem Teil des Skripts funktioniert (jedes Mal, wenn ich es anrufe).

Darüber hinaus führt der Unteraufruf 'comp_simu_exe' einen externen Simulator (in der Shell) aus, der nach Ablauf des Zeitlimits beendet wird (dieser Prozess muss ebenfalls beendet werden).

%Vor%

Gibt es eine Verbindung zwischen dem Problem des toten Kommens und dem Aufruf der Systemfunktion?

    
YoDar 22.07.2009, 13:38
quelle

3 Antworten

5

Hier ist eine zweite Antwort, die sich mit dem Fall befasst, dass ein zweiter Prozess zeitlich begrenzt wird. Verwenden Sie diesen Fall, um Ihr externes Programm zu starten und stellen Sie sicher, dass es nicht zu lange dauert:

%Vor%     
innaM 23.07.2009, 09:48
quelle
12

Sie können einen Alarm einstellen, der nach einer bestimmten Anzahl von Sekunden aus Ihrem Code ausbricht:

%Vor%

Oder wenn Sie die Schleife mindestens dreimal ausführen müssen, egal wie lange dies dauern könnte:

%Vor%     
innaM 22.07.2009 13:48
quelle
3

Die Art und Weise, wie Sie in Perl mit solchen Timeouts umgehen, ist die Funktion alarm . Es sendet das Signal ALRM an Ihren Prozess nach der Anzahl der Sekunden, die Sie daran übergeben haben. Seien Sie vorsichtig, wenn der Code, den Sie versuchen, das Timeout für Aufrufe sleep einzurichten, da sie auf vielen Plattformen nicht gut mischen. Die Grundstruktur sieht so aus:

%Vor%

oder kompakter geschrieben:

%Vor%     
Chas. Owens 22.07.2009 14:35
quelle

Tags und Links