လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Time_nanosleep ကကြားဖြတ် signal ကိုကြားဖြတ်နေရင်ဘာလုပ်ရမလဲ။

Time_nanosleep ကကြားဖြတ် signal ကိုကြားဖြတ်နေရင်ဘာလုပ်ရမလဲ။

gitbox 2025-05-27

PHP တွင် time_nanosleep () function ကိုပရိုဂရမ်သည် nanosecond တိကျများနှင့်သတ်မှတ်ထားသောအချိန်အတွက်အိပ်စက်ရန်အသုံးပြုသည်။ ဥပမာအားဖြင့်အသုံးပြုရန်အလွန်လွယ်ကူသည်။

 time_nanosleep(1, 500000000); // အိပ်နေခြင်း1.5စက်ဏန့်

သို့သော်အမှန်တကယ်အသုံးပြုမှုတွင် time_nanosleep () ကို စနစ်အချက်ပြချက်များဖြင့် (ထိုကဲ့သို့သောကြားဖြတ်အချက်ပြမှုများကဲ့သို့) အနှောင့်အယှက်ဖြစ်စေနိုင်သည်။ ဤကိစ္စတွင်လုပ်ဆောင်ချက်သည် Boolean True ထက်ကျန်စက္ကန့်များနှင့် nanoseconds များပါ 0 င်သည့်ခင်းနိတ်မှုတစ်ခုသို့ထည့်သွင်းထားသည်။

အဘယ်ကြောင့်အချက်ပြခြင်းဖြင့်ကြားဖြတ်နှောင့်ယှက်သနည်း

Linux (သို့) Unix စနစ်များတွင်လုပ်ငန်းစဉ်များသည်အိပ်စက်ခြင်းအခြေအနေကိုနှော င့ ်ယှက်စေမည့် Sigtt, Sigte Sigterm ကဲ့သို့သော Sigtt, Sigtterm ကဲ့သို့သော Sigtt, Sigtterm ကဲ့သို့သောအချက်ပြမှုများရရှိနိုင်သည်။ PHP ကိုယ်တိုင်ကအလိုအလျောက်အိပ်စက်ခြင်းကိုအလိုအလျောက်ပြန်ကြိုးစားခြင်းမရှိပါ။ ၎င်းသည်အိပ်စက်ခြင်းအချိန်ကိုဖြစ်ပေါ်စေသည်။

ဘယ်လိုစစ်ကြောစီရင်ခြင်းနှင့်ပြန်လည်ထူထောင်ရမည်နည်း။

time_nanosleep () အချက်ပြမှုကြောင့်ကြားဖြတ်သောအခါ၎င်းသည် စစ်မှန်သော နောက်သို့မပြန်ပါ, သို့သော်ခင်းကျင်းမှုကိုပြန်ပို့သည်။

 [
    'seconds' => 剩余စက်ဏန့်数,
    'nanoseconds' => 剩余纳စက်ဏန့်数,
]

ဤအချက်အပေါ် အခြေခံ. ကျွန်ုပ်တို့သည်အိပ်စက်ခြင်းအချိန်ပြည့်သေချာစေရန် loop တစ်ခုကိုရေးနိုင်သည်။

 function reliable_nanosleep(int $seconds, int $nanoseconds): void {
    while (true) {
        $result = time_nanosleep($seconds, $nanoseconds);
        if ($result === true) {
            // အိပ်စက်ခြင်းကိုအောင်မြင်စွာပြီးစီးခဲ့သည်
            break;
        }
        // signal အားဖြင့်ကြားဖြတ်,$result ကျန်ရှိသောအချိန်ပါဝင်သည်
        $seconds = $result['seconds'];
        $nanoseconds = $result['nanoseconds'];
    }
}

ဤလုပ်ဆောင်ချက်သည်အိပ်စက်ခြင်းပြည့်စုံသည်အထိကျန်ရှိနေသေးသောအိပ်စက်ခြင်းအချိန်ကိုပြန်လည်စစ်ဆေးသည်။

နမူနာကုဒ်အပြည့်အစုံ

 <?php
function reliable_nanosleep(int $seconds, int $nanoseconds): void {
    while (true) {
        $result = time_nanosleep($seconds, $nanoseconds);
        if ($result === true) {
            break;
        }
        $seconds = $result['seconds'];
        $nanoseconds = $result['nanoseconds'];
    }
}

// နမူနာ:အိပ်နေခြင်း2.3စက်ဏန့်
echo "开始အိပ်နေခြင်း\n";
reliable_nanosleep(2, 300000000);
echo "အိပ်နေခြင်း结束\n";
?>

အပိုဆောင်းအကြံဥာဏ်

  • signal processing : အကယ်. သင်၏ပရိုဂရမ်သည်အချက်ပြမှုများကိုလုပ်ဆောင်ရန်လိုအပ်ပါက pcntl_signal () ကို ပိုမိုကျိုးကြောင်းဆီလျော်သောအပြုအမူနှင့်ပေါင်းစပ်ရန်အချက်ပြ processing function ကိုသတ်မှတ်ရန်အကြံပြုသည်။

  • အခြားရွေးချယ်စရာ - သင်၏ System ပတ် 0 န်းကျင်သည် USLEEP () သို့မဟုတ် အိပ်စက်ခြင်းကို ထောက်ပံ့ပါက၎င်းတို့ကိုလည်းအသုံးပြုနိုင်သည်, သို့သော်၎င်းတို့သည်တိကျမှုနည်းပါးသည်။


PHP နှင့်ဆက်စပ်သောသတင်းအချက်အလက်များအတွက်အသေးစိတ်စာရွက်စာတမ်းများနှင့်ဥပမာများအတွက် Gitbox.Net/php-Docs များကိုဖတ်ရှုပါ။