Schrift
[thread]7555[/thread]

Etwas warten dann Funktion beenden: Mit Zeitschleife abbrechen (Seite 2)



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
esskar
 2005-12-20 15:23
#61138 #61138
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=fritz,20.12.2005, 13:36]ach und noch was, funkioniert diese Fork funktion ueberhaupt weil ich unter windows programmiere und jetzt schon oefter gelesen habe das es da nicht geht und dann aber doch wieder ohne Probleme funktioniert.[/quote]
fork läuft seit WindowsNT ganz ohne probleme.
wird aber nur emuliert - heißt, es werden threads verwendet anstatt echte kind-prozesse - aber das muss uns ja nicht interessieren!\n\n

<!--EDIT|esskar|1135085057-->
esskar
 2005-12-20 15:27
#61139 #61139
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es könnte auch ohne fork und mit alarm gehen

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $timeout = 10; # seconds
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
C_function_call();
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}


HTH
fritz
 2005-12-20 15:39
#61140 #61140
User since
2005-10-19
44 Artikel
BenutzerIn
[default_avatar]
habs mit alarm hinbekommen und bin jetzt schon mal sehr zufrieden mit mir, Perl und der Community. Als Schmankerl waere es jetzt fuer mich noch sehr schoen wenn der Test danach nicht abgebrochen werden wuerde sondern die danach folgenden Funktionsaufrufe trotzdem ausgefuerhrt werden wuerden.

Nach dem Motto:

Der RUN TO BREAKPOINT dauert laenger als 20 sec, also beende das und rufe die naechste Funktion auf.

Gibts da auch ne Moeglichkeit.
Crian
 2005-12-20 15:42
#61141 #61141
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
die abfangen
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
fritz
 2005-12-20 15:51
#61142 #61142
User since
2005-10-19
44 Artikel
BenutzerIn
[default_avatar]
Und wie mach ich das, wahrscheinlich ist das total einfach aber ich komm jetzt nicht drauf weil ich mir schon den ganzen Tag den Kopf zermatere.
Gibts auch ne Moeglichkeit bei Zeitueberschreitung eine dementsprechende print Anweisung zu starten?

Zur Zeit sieht mein Programm so aus
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  test_info(" Run to Breakpoint ");

$SIG{ALARM}=sub {};
$usec1 = gettimeofday;
eval{
alarm(20);
prozess_Run ( 'RUN_TO_BREAKPOINT', 'FALSE')||($DevCon[13] =1);


##############################################################################
$counter = 0;
#State call to end the run
test_info("Breakpoint State");
do
{
prozess_State ( \$state, 'FALSE', \$cycle,\$loopbreak)||($DevCon[14] =1);

$counter++;
}
while ($loopbreak != 3);
my $usec2 = gettimeofday;
my $usec = $usec2-$usec1;
printf "State of the run: $state\n";
printf "Cycles if single step is used: $cycle\n";
printf "Cycles until breakpoint was hit: $counter\n";
printf "Loop Runtime : %.4f sec\n",$usec;
alarm(0);
};

mit dem test_info printe ich die Zeile dahinter und mach sie farbig und so sachen, ist auch ne Funktion\n\n

<!--EDIT|renee|1135116609-->
esskar
 2005-12-20 15:57
#61143 #61143
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=esskar,20.12.2005, 14:27]
Code: (dl )
1
2
3
4
5
6
7
if ($@) {
   die unless $@ eq "alarm\n";   # propagate unexpected errors
   # timed out
}
else {
   # didn't
}
[/quote]
wenn du dies unterhalb des eval-blocks schreibst, sollte es eigentlich gehen :)
fritz
 2005-12-20 16:15
#61144 #61144
User since
2005-10-19
44 Artikel
BenutzerIn
[default_avatar]
So, jetzt laeuft das Programm wirklich fehlerfrei. War echt super von euch das ihr mir hier so prompt geholfen habt.

Auf so eine Community koennt ihr euch echt was einbilden.

Vielen Dank nochmal

MFG

Fritz
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-12-20 10:25.