איזו פקודה ישנה בPERL שגורמת למחשב להשהות את עצמו בתוך סאברוטינה למשך זמן מסויים ורק אז להמשיך... (אני מעוניין גם באפשרות לקבוע כפתור או פעולה שתעצור את ההשהייה באמצע ותביא להמשך הסאברוטינה). קיימת כזאת חיה?
לולאת קלט. אתה לוקח את הזמן, ונכנס ללולאה שכל הזמן בודקת כמה דברים אחד אחרי השני: האם נלחץ מקש, האם עבר הזמן הנדרש. לאחר היציאה מהלולאה אתה יכול לבדוק איזה תנאי הוציא אותך ממנה ולבצע פעולה בהתאם.
אתה צריך Non-Blocking IO או שני Threads. הנה דרך מהירה ומלוכלכת. CTRL-C מסיים את הלולאה וממשיך בתוכנית. לפני הלולאה ואחריה הוא מתפקד כרגיל.
#!/usr/bin/perl use strict; use warnings; $|++; my $sighit = 0; # global flag if signal was hit # signal handler for CTRL-C sub handler { $sighit = 1; # Set the flag $SIG{INT} = 'DEFAULT'; # restore the default signal-handler } my $sleep = 20; $SIG{INT} = \&handler; # Installing singal handler # loop until end of count or signal hit while ($sleep-- > 0 && $sighit == 0) { print "Sleeping $sleep\n"; sleep (1); } $SIG{INT} = 'DEFAULT'; # restore the default signal-handler print "continuing as usual\n";
קיוויתי שאני לא אצטרך לבצע זאת ככה כי זה פחות יעיל מבחינת משאבים.. אבל אם זו הדרך היחידה אז ככה זה יעשה... שאלה: האם זה באמת פחות יעיל? ואני מדבר על תוכנה כזו שתמדוד 5 דקות ותבצע את הבדיקה הזו בכל פעם... האם זה יוצר עומס על המערכת של המחשב?