print und alarm

30/01/2011 - 18:17 von Ulli Horlacher | Report spam
Kann es sein, dass print sich nicht von alarm bzw Time::HiRes::ualarm
unterbrechen laesst?

Ich habe eine perl/tk Anwendung, die auf ein network file handle (socket)
schreibt. Gleichzeitig soll waehrenddessen ein animiertes GIF dargestellt
werden. Fuer letzteres gibts Tk::Animation, was in Tk::MainLoop auch prima
funktioniert: das GIF-"Filmchen" laeuft so wie in einem Webbrowser ab.

Nur waehrend des net-IO "hakelt" es. Das sieht schematisch so aus:

$gif->start_animation(100);

while (read $file,$chunk,$blocksize) {
print {$NH} $chunk;
$gif->update;
}

So weit klar, weil das print blockiert, wenn der socket voll ist. Das TK
update kommt dann viel zu selten.

Also hab ich es mit einem alarm signal handler versehen:

$SIG{'ALRM'} = sub {
$gif->update;
print "alarm";
};

while (read $file,$chunk,$blocksize) {
ualarm(100000);
print {$NH} $chunk;
}

Leider aendert sich im Ergebnis gar nichts. Das GIF wird so langsam wie
zuvor angezeigt. Der debug-output "alarm" kommt auch nur alle x Sekunden.

Wenn print unterbrechbar waere, wuerden auch Daten verloren gehen, wenn ich
mir das nun recht ueberlege :-)

Vorschlaege, wie man das Problem (anders) loesen koennte?


Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum E-Mail: horlacher@rus.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-685-65868
Allmandring 30 Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.rus.uni-stuttgart.de/
 

Lesen sie die antworten

#1 Peter J. Holzer
30/01/2011 - 20:51 | Warnen spam
On 2011-01-30 17:17, Ulli Horlacher wrote:
Kann es sein, dass print sich nicht von alarm bzw Time::HiRes::ualarm
unterbrechen laesst?


[...]
Wenn print unterbrechbar waere, wuerden auch Daten verloren gehen, wenn ich
mir das nun recht ueberlege :-)

Vorschlaege, wie man das Problem (anders) loesen koennte?



syswrite statt print verwenden?

hp

Ähnliche fragen