Thread Verzögerung von Ereignissen
(17 answers)
Opened by piet at 2015-06-02 16:18
Hallo,
ich habe es aktuell nachfolgend gelöst. Code (perl): (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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #!/usr/bin/perl -w use warnings; use strict; package timer; ######################################################################################## sub new { my $classname = shift; my $self = {timerstart => 0, startzeit => 0, aktzeit => 0, endzeit => 0}; return bless($self, $classname); } ######################################################################################## sub TON { my $self = shift; my $vke = shift; my $laufzeit = shift; if ($vke == 0) { $self->{timerstart} = 0; $self->{aktzeit} = 0; return 0; } #Timer initialisieren if ($self->{timerstart} == 0 && $vke == 1) { $self->{timerstart} = 1; $self->{startzeit} = `(date +%s%N)` / 1000000; $self->{endzeit} = $self->{startzeit} + $laufzeit; $self->{aktzeit} = int($self->{endzeit} - $self->{startzeit}); } if ($self->{timerstart} && $self->{aktzeit} > 0 ) { $self->{aktzeit} = int($self->{endzeit} - `(date +%s%N)` / 1000000); return 0; } else { $self->{aktzeit} = 0; return 1; } } ######################################################################################## my $timer_1 = timer->new(); while (1) { sleep(1); if ($timer_1->TON(1,10000)) { print "Zeit ist abgelaufen\n"; } else { print "Zeit läuft=".int($timer_1->{aktzeit}/1000)."\n"; } } Für mich ist es wichtig keine externe lib zu benutzen und es möglichts einfach (ohne Thread) zu lösen. Da ich keine andere Möglichkeit als einen Shellbefehl gefunden habe ... war dies für mich die Lösung. Jetzt hätte ich gerne eure Meinung, ob ich etwas optimieren kann ... Seid nicht so streng mit mir ;-) Gruß piet Last edited: 2015-06-10 20:32:03 +0200 (CEST) |