Linux sagir-us1.hostever.us 5.14.0-570.51.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 8 09:41:34 EDT 2025 x86_64
LiteSpeed
Server IP : 104.247.108.91 & Your IP : 216.73.216.105
Domains : 74 Domain
User : georgeto
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
doc /
perl-Thread-Queue /
examples /
Delete
Unzip
Name
Size
Permission
Date
Action
callback.pl
2.97
KB
-rwxr-xr-x
2018-07-18 02:31
queue.pl
1.5
KB
-rwxr-xr-x
2022-02-16 15:03
Save
Rename
#!/usr/bin/perl # Simplified example illustrating event handling and callback threads # Callback threads register their queues with the event handler thread. # Events are passed to the event handler via a queue. # The event handler then disseminates the event to the appropriately # registered thread. use strict; use warnings; use threads; use Thread::Queue; MAIN: { # Queue for registering callbacks my $regis_q = Thread::Queue->new(); # Queue for disseminating events my $event_q = Thread::Queue->new(); # Create callback threads threads->create('CallBack', 'USR1', $regis_q)->detach(); threads->create('CallBack', 'USR2', $regis_q)->detach(); threads->create('CallBack', 'HUP', $regis_q)->detach(); threads->create('CallBack', 'ALRM', $regis_q)->detach(); # Create event handler thread threads->create('EventHandler', $regis_q, $event_q)->detach(); # Capture SIGUSR1 events $SIG{'USR1'} = sub { $event_q->enqueue('USR1'); # Send to event handler }; # Capture SIGUSR1 events $SIG{'USR2'} = sub { $event_q->enqueue('USR2'); # Send to event handler }; # Capture SIGHUP events $SIG{'HUP'} = sub { $event_q->enqueue('HUP'); # Send to event handler }; # Capture SIGHUP events $SIG{'ALRM'} = sub { $event_q->enqueue('ALRM'); # Send to event handler alarm(5); # Reset alarm }; # Ready print(<<_MSG_); Send signals to PID = $$ (e.g., 'kill -USR1 $$') Use ^C (or 'kill -INT $$') to terminate _MSG_ # Set initial alarm alarm(5); # Just hang around while (1) { sleep(10); } } ### Subroutines ### sub EventHandler { my ($regis_q, $event_q) = @_; my %callbacks; # Registered callback queues while (1) { # Check for any registrations while (my ($event_type, $q) = $regis_q->dequeue_nb(2)) { if ($q) { $callbacks{$event_type} = $q; } else { warn("BUG: Bad callback registration for event type $event_type\n"); } } # Wait for event if (my $event = $event_q->dequeue()) { # Send event to appropriate queue if (exists($callbacks{$event})) { $callbacks{$event}->enqueue($event); } else { warn("WARNING: No callback for event type $event\n"); } } } } sub CallBack { my $event_type = shift; # The type of event I'm handling my $regis_q = shift; # Announce registration my $tid = threads->tid(); print("Callback thread $tid registering for $event_type events\n"); # Register my queue for my type of event my $q = Thread::Queue->new(); $regis_q->enqueue($event_type, $q); # Process loop while (1) { # Wait for event callback my $item = $q->dequeue(); # Process event print("Callback thread $tid notified of $item event\n") if $item; } } # EOF