လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Time_nanosleep သည် POSIX အချက်ပြယန္တရားနှင့်အပြန်အလှန်ဆက်သွယ်သည်

Time_nanosleep သည် POSIX အချက်ပြယန္တရားနှင့်အပြန်အလှန်ဆက်သွယ်သည်

gitbox 2025-05-28

PHP ပရိုဂရမ်တွင် Time_Nanosleep () Time_Nanosleep () သည် nanosecond နှောင့်နှေးမှုကိုအကောင်အထည်ဖော်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 bool time_nanosleep(int $seconds, int $nanoseconds): bool|array

ဤလုပ်ဆောင်ချက်၏အဓိကရည်ရွယ်ချက်မှာသတ်မှတ်ထားသောအချိန်ကိုသတ်မှတ်ထားသောအချိန်ကိုခေတ္တရပ်တန့်ရန်မှာ ဒေါ်လာစက္ကန့်ပိုင်း နှင့် ဒေါ်လာနဲနော့ဒွန်သော သတ်မှတ်ချက်များအတူတကွအိပ်စက်ခြင်းကြာချိန်ကိုအတူတကွဆုံးဖြတ်ရန်ဖြစ်သည်။ သို့သော် Time_Nanosleep () တွင် POSIX အချက်ပြမှုကိုခံယူပါက အကယ်. POSIX အချက်ပြမှုကိုလက်ခံရရှိပါကအိပ်စက်ခြင်းကိုပြတ်တောက်စေနိုင်သည်။

1 ။ POSIX အချက်ပြမှုများမိတ်ဆက်

Posix အချက်ပြမှုများသည် UNIX နှင့် UNIX ကဲ့သို့သောစနစ်များအသုံးပြုသောယန္တရားများဖြစ်သည်။ လည်ပတ်နေစဉ်အတွင်းလုပ်ငန်းစဉ်သည်အချက်ပြပရိုဆက်ဆာ (handler) ကိုသတ်သတ်မှတ်မှတ်အချက်ပြမှုကိုတုံ့ပြန်ရန်မှတ်ပုံတင်နိုင်သည်။

ဥပမာအားဖြင့်:

 pcntl_signal(SIGINT, function() {
    echo "ခံယူ SIGINT အလံပြချက်,ကြားဖြတ်ရေးသားခြင်းယုတ္တိဗေဒ Execute လုပ်ပါ。\n";
});

2 ။ time_nanosleep နှင့် signal ပြတ်တောက်ခြင်း

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";
}

3 ။ signal interrupts ကိုမှန်ကန်စွာကိုင်တွယ်ဖြေရှင်းနည်း

အကယ်. 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;
    }
}

4 ။ signal processing ကြားဖြတ်၏ဥပမာအစပျိုးခြင်းဥပမာ

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 ကိုအသုံးပြုသည်။

5 ။ အိပ်စက်ခြင်းနှင့် USLEEP နှင့်နှိုင်းယှဉ်ပါ

အိပ်စက်ခြင်း () နှင့် USLEEP () , time_nanosleep () မတူဘဲအချက်ပြ signal ကိုပိုမိုရှင်းလင်းစွာဖော်ထုတ်ပြီးအချက်ပြမှုအားတုန့်ပြန်ခြင်းအတွက်ပိုမိုအသေးစိတ်ထိန်းချုပ်ရန်ယုတ္တိဗေဒကိုပိုမိုရှင်းလင်းစွာဖော်ထုတ်ရန်ပိုမိုရှင်းလင်းစွာဖော်ထုတ်နိုင်သည်။ အိပ်စက်ခြင်း () ပြတ်တောက်သွားသောအခါကျန်ရှိနေသေးသောစက္ကန့်များကိုသာပြန်ယူပြီး USleep () သည် တိုက်ရိုက်မအောင်မြင်ဘဲကျန်ရှိသောအချိန်ကိုမထောက်ပံ့ပါ။

နိဂုံးချုပ်အားဖြင့်

Time_nanosleep () function သည် PHP အစီအစဉ်၏အိပ်စက်ခြင်းအချိန်ကိုတိကျစွာမထိန်းချုပ်နိုင်သော်လည်း POSIX အချက်ပြအမှတ်အသားနှင့်အတူကောင်းစွာအပြန်အလှန်ဆက်သွယ်နိုင်သည်။ ပရိုဂရမ်သည်အိပ်စက်ခြင်းကိုပြုလုပ်သောအခါ, signal interrupt ကိုကြုံတွေ့ရပါကကျန်ရှိသောအချိန်ကိုပြန်လည်နေရာချထားရေးကိုစစ်ဆေးခြင်းနှင့်အိပ်မပျော်မှုများကိုဆက်လက်လုပ်ဆောင်ခြင်းအားဖြင့်ရရှိနိုင်ပါသည်။ allynchronous signals များကိုလုပ်ဆောင်ရန်လိုအပ်သည့်ရှည်လျားသောပြေး script များကိုရေးသားရာတွင်ဤစွမ်းရည်သည်အထူးအရေးကြီးသည်။