If I just had two threads to signal I would create a queue for each one and just enqueue the messages when I felt the need. the thread can then block on a queue read and do nothing until it gets a message
Updated to mention threads->create
...
use Thread::Queue;
my $conn_q = thread::queue->new()
my $rev_q = thread::queue->new()
sub connection_check {
while (my $msg = $conn_q->dequeue) { # will block 'til it gets sign
+aled
# Do something
}
}
...
# in main
$conn_thread = threads->create('connection_check');
$conn_q->enqueue("Get on with it");
$min % 55 will be zero at 55 and at 0 minutes. Perhaps two timers would do your trick
my %timer = (
check_conn => 0,
check_rev => 0,
};
my %interval = (
check_conn => 5, # check conn every 5 min
check_rev => 55, # and revocation at 55min
};
while (1) {
my $now = time;
if ($now + interval{check_conn} * 60 > $timmer{check_conn} ) { #pa
+ssed mark
$timer{check_conn} = $now + interval{check_conn} * 60;
# signal conn thread to do its work
$conn_q->enqueue("Get on with it");
}
# similar for check rev list
#
sleep 10; # or 60, or 300...
}
Cheers,
R.
Pereant, qui ante nos nostra dixerunt!