PHP 8.4.2 Released!

time_nanosleep

(PHP 5, PHP 7, PHP 8)

time_nanosleepÇalışmayı saniye ve nanosaniye cinsinden geciktirir

Açıklama

time_nanosleep(int $süre, int $nanosüre): array|bool

Betiğin çalışmasını süre saniye ve nanosüre nanosaniye kadar bekletir.

Bağımsız Değişkenler

süre

Beklenecek saniye sayısını belirten negatif olmayan bir tamsayı.

nanosüre

Saniyenin milyarda birlerini belirten negatif olmayan bir tamsayı.

Bilginize: Windows'ta, donanıma bağlı olarak betik belirtilenden daha uzun süre bekleyebilir.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Eğer gecikme bir sinyalle kesilirse şu bileşenlere sahip bir ilişkisel dizi döner:

  • seconds - Kalan sürenin saniye sayısı.
  • nanoseconds - Son saniyeden kalan nanosaniye sayısı.

Örnekler

Örnek 1 - time_nanosleep() örneği

<?php
// Dikkat! Bu beklendiği gibi çalışamazsa bir dizi döndürür
if (time_nanosleep(0, 500000000)) {
echo
"Yarım saniyeliğine uyundu.\n";
}

// Bu daha iyidir:
if (time_nanosleep(0, 500000000) === true) {
echo
"Yarım saniyeliğine uyundu.\n";
}

// Bu ise en iyisidir:
$nano = time_nanosleep(2, 100000);

if (
$nano === true) {
echo
"2 saniye, 100 milisaniyeliğine uyundu.\n";
} elseif (
$nano === false) {
echo
"Uyku kaçtı.\n";
} elseif (
is_array($nano)) {
$seconds = $nano['seconds'];
$nanoseconds = $nano['nanoseconds'];
echo
"Gecikme bir sinyalle kesildi.\n";
echo
"Kalan süre: $seconds saniye, $nanoseconds nanosaniye.";
}
?>

Ayrıca Bakınız

add a note

User Contributed Notes 4 notes

up
7
m at kufi dot net
19 years ago
You should take into account, if you use the function replacement down here, the CPU will be in use of 99% for the time of execution...

(A little bit better in this situation is to let the 'full seconds' go by a normal sleep command (makes the thread sleep!, and uses minimum cpu))

<?php
//THIS IS THE FUNCTION WE ARE TALKIN ABOUT
function timeWait($microtime)
{
//optimizations added by me [start]
//sleep the full seconds
sleep(intval($microtime));
//set the microtime to only resleep the last part of the nanos
$microtime = $microtime - intval($microtime);
//optimizations added by me [end]

$timeLimit = $microtime + array_sum(explode(" ",microtime()));
while(
array_sum(explode(" ",microtime())) < $timeLimit)
{
/*DO NOTHING*/}
return(
true);
}

//THIS IS HOW WE CAN USE IT
echo "Process started at " . date("H:i:s") . " and " . current(explode(" ",microtime())) . " nanoseconds.<br>";
timeWait(5.5); //With this call the system will wait 5 seconds and a half. You can use either integer or float.
echo "Process completed at " . date("H:i:s") . " and " . current(explode(" ",microtime())) . " nanoseconds.";
?>
up
6
anybody (a) emuxperts.net
18 years ago
Documentation states that "seconds" must be positive. This is not correct, 0 is possible.

Rather, "seconds" must be non-negative.
up
6
fantasysportswire at yahoo dot com
18 years ago
Just glancing at this - and the note from over a year ago with a implementation for windows.. with 5.0.0 and higher it would be simplier to just do something like......

<?php

if (!function_exists('time_nanosleep')) {

function
time_nanosleep($seconds, $nanoseconds) {

sleep($seconds);
usleep(round($nanoseconds/100));

return
true;

}

}

?>

....off the top of my head - obviously simple enough there should be no mistakes.. but those are the ones that always seem to get ya :( .....
up
3
b dot andrew at shaw dot ca
16 years ago
A response to the note below:

Your function is also useless, as the WinNT 32 kernel only functions at a minimum of about 10+ ms (1,000 us), rendering usleep() useless, because usleep uses the C function which is provided by the system (in this case, kernel32.dll).

You'll want to use a function that does not rely on the kernel, but rather something made for precise measurement:

<?php
function usleep_win( $micro_seconds )
{
if ( @
function_exists( "socket_create" ) && @function_exists( "socket_select" ) )
{
$false = NULL;
$socket = array( socket_create( AF_INET, SOCK_RAW, $false ) );
socket_select( $false, $false, $socket, 0, $micro_seconds );
return
true;
}
else
{
return
false;
}
}
?>

This function will allow to you sleep for a specified microsecond, although I have measured it to be off by ~5 us.

Again, most of this depends on the hardware in your system. If you _REALLY_ need to be precise to < 10 us, you shouldn't be using WinNT anyways!
To Top