PHP ပရိုဂရမ်တွင် Time_Nanosleep () Time_Nanosleep () သည် nanosecond နှောင့်နှေးမှုကိုအကောင်အထည်ဖော်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
bool time_nanosleep(int $seconds, int $nanoseconds): bool|array
ဤလုပ်ဆောင်ချက်၏အဓိကရည်ရွယ်ချက်မှာသတ်မှတ်ထားသောအချိန်ကိုသတ်မှတ်ထားသောအချိန်ကိုခေတ္တရပ်တန့်ရန်မှာ ဒေါ်လာစက္ကန့်ပိုင်း နှင့် ဒေါ်လာနဲနော့ဒွန်သော သတ်မှတ်ချက်များအတူတကွအိပ်စက်ခြင်းကြာချိန်ကိုအတူတကွဆုံးဖြတ်ရန်ဖြစ်သည်။ သို့သော် Time_Nanosleep () တွင် POSIX အချက်ပြမှုကိုခံယူပါက အကယ်. POSIX အချက်ပြမှုကိုလက်ခံရရှိပါကအိပ်စက်ခြင်းကိုပြတ်တောက်စေနိုင်သည်။
Posix အချက်ပြမှုများသည် UNIX နှင့် UNIX ကဲ့သို့သောစနစ်များအသုံးပြုသောယန္တရားများဖြစ်သည်။ လည်ပတ်နေစဉ်အတွင်းလုပ်ငန်းစဉ်သည်အချက်ပြပရိုဆက်ဆာ (handler) ကိုသတ်သတ်မှတ်မှတ်အချက်ပြမှုကိုတုံ့ပြန်ရန်မှတ်ပုံတင်နိုင်သည်။
ဥပမာအားဖြင့်:
pcntl_signal(SIGINT, function() {
echo "ခံယူ SIGINT အလံပြချက်,ကြားဖြတ်ရေးသားခြင်းယုတ္တိဗေဒ Execute လုပ်ပါ。\n";
});
PHP script သည် Time_Nanosleep () သည်အိပ်စက်ခြင်းအခြေအနေကိုထည့်သွင်းရန် PHPT_NANOSESEEP () သည်အိပ်စက်ခြင်းစနစ်သို့ 0 င်ရောက်သောအခါလုပ်ငန်းစဉ်သည်သတ်မှတ်ထားသောအချိန်မကုန်မချင်းသို့မဟုတ် signal ကိုအနှောင့်အယှက်ပေးသည့်အထိပိတ်ဆို့ခြင်းစနစ်ကိုသတ်မှတ်လိမ့်မည်။ Signal Breaks Breaks သည်အိပ်မပျော်ပါက Time_Nanosleep () သည် မှားယွင်းသော နောက်သို့ပြန်ပို့ရန်ပျက်ကွက်ခြင်းမရှိသော်လည်းကျန်အိပ်စက်ခြင်းအချိန်ပါ 0 င်သည်။
ဥပမာအားဖြင့်:
$result = time_nanosleep(5, 0);
if (is_array($result)) {
echo "sleep ကြားဖြတ်ခံရ,ကျန်ရှိသောအချိန်:{$result['seconds']} စက်ဏန့် {$result['nanoseconds']} 纳စက်ဏန့်\n";
}
အကယ်. signal ကိုပြတ်တောက်ပြီးနောက် developer သည်ကျန်ရှိနေသေးသောအိပ်စက်ခြင်းကိုဆက်လက်ဖြည့်စွက်လိုပါက Time_Nanosleep () ကို အောက်ပါအတိုင်းပြန်လုပ်ရန် loop look ကိုသုံးနိုင်သည်။
$seconds = 5;
$nanoseconds = 0;
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
break; // အောင်မြင်စွာပြီးစီးခဲ့သည်
} elseif (is_array($result)) {
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
echo "被အလံပြချက်中断,继续ကျန်ရှိသောအချိန်的休眠...\n";
} else {
echo "အမှားတစ်ခုဖြစ်ပွားခဲ့သည်,အိပ်စက်ခြင်းထဲကခုန်。\n";
break;
}
}
Time_Nanosleep () ကို အချက်ပြမှုဖြင့်ကြားဖြတ်နေသည့်အခြေအနေကိုသရုပ်ပြရန်, PCNTL နှင့်ပေါင်းစပ်နိုင်သည်။
declare(ticks = 1);
pcntl_signal(SIGUSR1, function() {
echo "ခံယူ SIGUSR1 အလံပြချက်\n";
});
echo "အိပ်ပျော်နေပါ...\n";
$pid = getmypid();
$url = "https://gitbox.net/send_signal.php?pid=$pid";
echo "ကျေးဇူးပြုပြီးလည်ပတ်ပါ $url လုပ်ငန်းစဉ်ကိုပို့ပါ SIGUSR1 အလံပြချက်\n";
$result = time_nanosleep(10, 0);
if (is_array($result)) {
echo "sleep ကြားဖြတ်ခံရ,ကျန်ရစ်နေသော:{$result['seconds']} စက်ဏန့် {$result['nanoseconds']} 纳စက်ဏန့်\n";
} else {
echo "sleep ပုံမှန်အားဖြင့်ပြီးစီးခဲ့သည်。\n";
}
မှတ်စု: အထက်ပါ URL ဥပမာသည် GitBox.net domain name ကိုအသုံးပြုသည်။
အိပ်စက်ခြင်း () နှင့် USLEEP () , time_nanosleep () မတူဘဲအချက်ပြ signal ကိုပိုမိုရှင်းလင်းစွာဖော်ထုတ်ပြီးအချက်ပြမှုအားတုန့်ပြန်ခြင်းအတွက်ပိုမိုအသေးစိတ်ထိန်းချုပ်ရန်ယုတ္တိဗေဒကိုပိုမိုရှင်းလင်းစွာဖော်ထုတ်ရန်ပိုမိုရှင်းလင်းစွာဖော်ထုတ်နိုင်သည်။ အိပ်စက်ခြင်း () ပြတ်တောက်သွားသောအခါကျန်ရှိနေသေးသောစက္ကန့်များကိုသာပြန်ယူပြီး USleep () သည် တိုက်ရိုက်မအောင်မြင်ဘဲကျန်ရှိသောအချိန်ကိုမထောက်ပံ့ပါ။
Time_nanosleep () function သည် PHP အစီအစဉ်၏အိပ်စက်ခြင်းအချိန်ကိုတိကျစွာမထိန်းချုပ်နိုင်သော်လည်း POSIX အချက်ပြအမှတ်အသားနှင့်အတူကောင်းစွာအပြန်အလှန်ဆက်သွယ်နိုင်သည်။ ပရိုဂရမ်သည်အိပ်စက်ခြင်းကိုပြုလုပ်သောအခါ, signal interrupt ကိုကြုံတွေ့ရပါကကျန်ရှိသောအချိန်ကိုပြန်လည်နေရာချထားရေးကိုစစ်ဆေးခြင်းနှင့်အိပ်မပျော်မှုများကိုဆက်လက်လုပ်ဆောင်ခြင်းအားဖြင့်ရရှိနိုင်ပါသည်။ allynchronous signals များကိုလုပ်ဆောင်ရန်လိုအပ်သည့်ရှည်လျားသောပြေး script များကိုရေးသားရာတွင်ဤစွမ်းရည်သည်အထူးအရေးကြီးသည်။