सिग्नल हैंडलिंग के साथ ख्याल रखना। पर्ल को सिंक्रोन को अतुल्यकालिक रूप से प्राप्त होता है और अगर किसी सिग्नल को प्राप्त किया जाता है तो कॉलबैक द्वारा दूसरे सिग्नल को संभाला जा रहा है, तो वे एक दूसरे के साथ खो सकते हैं या हस्तक्षेप कर सकते हैं।
घटना से निपटने पुस्तकालयों 'Win32 समर्थन पर्ल में सुंदर तो इतना है (मैं गैर cygwin Win32 समर्थन करने के लिए किया है), तो मैं आम तौर पर समय समाप्ति के लिए एक सरल मतदान पाश का उपयोग करें:
use Time::HiRes qw(sleep);
sub timeout {
my $timeout = shift;
my $poll_interval = shift;
my $test_condition = shift;
until ($test_condition->() || $timeout <= 0) {
$timeout -= $poll_interval;
sleep $poll_interval;
}
return $timeout > 0; # condition was met before timeout
}
my $success = timeout(30, 0.1, \&some_condition_is_met);
निष्क्रिय टाइमर आसानी से उपयोगकर्ता- या कॉलर-कॉन्फ़िगर करने योग्य बनाया जा सकता है और जब तक कि आप एक बेहद तंग लूप नहीं कर रहे हों या लूप पर प्रतीक्षा करने वाले एकाधिक कॉलर हों (जहां आप रेस या डेड लॉक के साथ समाप्त हो सकते हैं), यह एक सरल, भरोसेमंद और क्रॉस है एक टाइमआउट लागू करने के लिए प्लेटफार्म तरीका।
यह भी ध्यान रखें कि लूप ओवरहेड का अर्थ यह होगा कि आप गारंटी नहीं दे सकते कि टाइमआउट पूरी तरह से मनाया जाता है। $ test_condition, कमी, कचरा संग्रह, आदि हस्तक्षेप कर सकते हैं।
स्रोत
2010-03-11 14:48:57
आपका eval एक बुरा बग के लिए कमजोर है। एक विस्तृत स्पष्टीकरण के लिए Try :: छोटे दस्तावेज़ पढ़ें: http://search.cpan.org/perldoc?Try::Tiny – daotoad