DELAY ב- PERL

jinji0

New member
DELAY ב- PERL

איזו פקודה ישנה בPERL שגורמת למחשב להשהות את עצמו בתוך סאברוטינה למשך זמן מסויים ורק אז להמשיך... (אני מעוניין גם באפשרות לקבוע כפתור או פעולה שתעצור את ההשהייה באמצע ותביא להמשך הסאברוטינה). קיימת כזאת חיה?
 
הרבה אפשרויות

# Core Prel: # sleep($seconds) # Win32: # Win32::Sleep($milliseconds); # Using Time::HiRes # require Time::HiRes; Time::HiRes::usleep($microseconds);​
 

jinji0

New member
ידוע לך על אפשרות לעצור את ההשהייה

תוך כדי? באמצעות לחיצה על כפתור מסויים שאני אבחר או שמוסכם מראש? תודה רבה על התשובה שלך.
 

jinji0

New member
מקפיץ!

חשובה לי האפשרות לעצור את ההשהייה באמצע ע"י פקודה מיוחדת... יש דרך יעילה לעשות זאת? או שאני צריך פשוט להשהות ל(פחות זמן)X(הרבה פעמים)
 

selalerer

New member
אני לא יודע פרל, אבל זה נשמע לי כמו

לולאת קלט. אתה לוקח את הזמן, ונכנס ללולאה שכל הזמן בודקת כמה דברים אחד אחרי השני: האם נלחץ מקש, האם עבר הזמן הנדרש. לאחר היציאה מהלולאה אתה יכול לבדוק איזה תנאי הוציא אותך ממנה ולבצע פעולה בהתאם.
 

annefan

New member
זה נכון אבל...

אתה צריך 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";​
 

jinji0

New member
תודה רבה - אפשר קצת הסבר?

מה אומרות 4 השורות הבאות:
use strict; use warnings; $|++; $SIG{INT} = 'DEFAULT'; $SIG{INT} = \&handler;​
שוב תודה, נדב
 

jinji0

New member
הבנתי הכל פחות או יותר.. חוץ מ -

מה אומרת השורה הזאת
$|++;​
 

jinji0

New member
בדיוק מה שאני אמרתי..

קיוויתי שאני לא אצטרך לבצע זאת ככה כי זה פחות יעיל מבחינת משאבים.. אבל אם זו הדרך היחידה אז ככה זה יעשה... שאלה: האם זה באמת פחות יעיל? ואני מדבר על תוכנה כזו שתמדוד 5 דקות ותבצע את הבדיקה הזו בכל פעם... האם זה יוצר עומס על המערכת של המחשב?
 
למעלה