I have a monitoring application that wants to alert if a certain I/O operation takes too long to complete. I have an old Threads (5005threads) implementation, but ran into a machine the Perl 5.8.8 which has only ithreads. Perl 5.8.8 ithreads seems to have no "is_done" status checking available.
How can I do this? Remember I can't wait for the thread to finish... that would miss the whole point.
#!/usr/bin/perl
use strict;
use warnings;
use threads;
use Data::Dumper;
my $thread1 = threads::async {
my $sleep = int(rand() * 10);
sleep($sleep);
return($sleep);
};
sleep(2);
# if( $thread1->is_running() ) {
# email("alert");
# } else {
# print "Thread finished in time, no problem\n";
# }
print "Thread eventually returned ".$thread1->join()."\n";
print "Exit\n";
$ perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
Platform:
osname=linux, osvers=2.6.24-19-server, archname=i486-linux-gnu-thr
+ead-multi
uname='linux palmer 2.6.24-19-server #1 smp sat jul 12 00:40:01 ut
+c 2008 i686 gnulinux '
config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dccc
+dlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/
+share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvend
+orlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/
+local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib
+/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/ma
+n3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man
+3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -
+Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so
+.5.8.8 -Dd_dosuid -des'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define usemulti
+plicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS
+-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE
+_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN
+-fno-strict-aliasing -pipe -I/usr/local/include'
ccversion='', gccversion='4.2.3 (Ubuntu 4.2.3-2ubuntu7)', gccosand
+vers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1
+2
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
+ lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
perllibs=-ldl -lm -lpthread -lc -lcrypt
libc=/lib/libc-2.7.so, so=so, useshrplib=true, libperl=libperl.so.
+5.8.8
gnulibc_version='2.7'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREAD
+S
USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API
Built under linux