Thread Verzögerung von Ereignissen (17 answers)
Opened by piet at 2015-06-02 16:18

Raubtier
 2015-06-02 22:58
#181241 #181241
User since
2012-05-04
1077 Artikel
BenutzerIn
[default_avatar]
Hallo Piet,

mir ist ehrlich gesagt noch nicht ganz klar, wofür du das erreichen willst. Ein Gedanke wäre ja, dass du die Variable $i nicht direkt manipulierst, sondern über ein Objekt setzt. Dann kann der Setter gleich schauen, ob der neue Wert über 100 ist und ggf. einen Thread starten.

Ansonsten ist vielleicht der Code untern eine Idee. Verrate doch mal ein bisschen mehr, wofür du das benötigst, da ich nicht glaube, dass mein Code hier wirklich sinnvoll ist:

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
#!/usr/bin/perl

use 5.14.0;
use warnings;
use threads;
use threads::shared;
use Thread::Suspend;

my $i : shared = 0;

my $worker = threads->create(sub {
    threads->self()->suspend();
    while (1) {
        say "Ich laufe nur, wenn i > 100";
        sleep 1;
    }
});


my $ueberwacher = threads->create(sub {
    while (1) {
        select undef, undef, undef, 0.1 while $i <= 100;
        $worker->resume();
        select undef, undef, undef, 0.1 while $i > 100;
        $worker->suspend();
    }
});

while (1) {
    print "Neuer Wert fuer i: ";
    chomp(my $answer = <STDIN>);
    last unless defined $answer;
    $i = $answer;
    
    $_->join() for threads->list(threads::joinable);
}

View full thread Verzögerung von Ereignissen