Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Perl] Vanuit thread reageren op SIG{TERM}

Pagina: 1
Acties:

  • xces
  • Registratie: Juli 2001
  • Laatst online: 18-11 15:10

xces

To got or not to got..

Topicstarter
Het volgende probleem;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$blnRunning = 1;

# Thread sub
sub doPoll {
    my ($intDelay) = @_;
    if ($intDelay < 5) {
        $intDelay = 5;
    }

    # Start main loop
    while ($blnRunning) {
        print "-> Polling ...\n";
        sleep $intDelay;
    }
    print "-> Polling stopped!\n";
}

# Start thread for monitoring
$objPollThread = threads->new(\&doPoll, $intDelay);


Op het moment dat ik SIG(INT) stuur (CTRL+C bijv.) wil ik dat de thread zijn loopje afmaakt en daarna stopt met draaien;

code:
1
2
3
4
5
6
7
8
9
10
11
12
# Closes current server and bails out
sub doQuit() {
    # Close listener
    print "-> Waiting for destruction\n";
    $blnRunning = 0;
    sleep 10;

    print "-> Server destroyed\n";
    exit;
}

$SIG{INT} = \&doQuit;


Maar dit werkt dus niet ;) De gestartte thread blijft gewoon draaien. Ik heb de manual er al op nageslagen, niets gevonden.. Kan iemand mij helpen?

  • xces
  • Registratie: Juli 2001
  • Laatst online: 18-11 15:10

xces

To got or not to got..

Topicstarter
Probleem is opgelost;
code:
1
2
# Global variables
our $blnRunning : shared;   # Signal boolean


echter zit ik nu met het tweede probleem; ik wil een object (package) in een shared hash zetten. Dit zodat ik bepaalde acties vanuit verschillende threads kan aanroepen. Als ik onderstaande code gebruik; gaat het echter fout met de melding: "Invalid value for shared scalar at x line x."

code:
1
2
our %hshSensors : shared;   # Sensor hash
$hshSensors{test} = new Person("Pietje", "Puck", 23234345);


Dit daarentegen gaat wel goed:
code:
1
2
my $objTest = new Person("Pietje", "Puck", 23234345);
print $objTest->getFirstName()."\n";