ID: 32203 Updated by: php-bugs@lists.php.net Reported By: master_tip at hotmail dot com -Status: Feedback +Status: No Feedback Bug Type: Date/time related Operating System: Windows 2000 Sp4 PHP Version: 5.0.3 New Comment:
No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". Previous Comments: ------------------------------------------------------------------------ [2005-03-06 16:13:51] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip ------------------------------------------------------------------------ [2005-03-06 07:11:39] master_tip at hotmail dot com a few corrections, it would ofcourse be usleep(0.001) since 1000microseconds are 1ms. btw you could also instead of keeping a 1ms break after each loop do 1sec break every 1000 loops by chunking them together. not nice but same result by doing just sleep. greetings, docey. ------------------------------------------------------------------------ [2005-03-06 07:00:25] master_tip at hotmail dot com Description: ------------ usleep can be very usefull for slowing loops and prevent them from using to much cpu but this usleep does not just slow is almost stops no mather what value you give it. look at included reproduce code, i run it as cgi but should be the same results from web or other interface. here is a test loop of 10000 loops. wich takes on my pc 6ms to complete without usleep. now here comes the strange things. when i remove usleep it runs in 6ms when i include usleep but set it to zero it takes 90ms logical since it still makes the call. but when i set usleep to 1 microsecond it takes 99sec to complete. a massive increase but okay. now when i set it to 1000, it still takes 99sec. although the usleep has multiplied factor 1000 it seems to have no effect. and when i increase to 2000 still no effect not until i set it till 100.000 it has effect. it now takes 1000sec(16min) to complete. yes i did lower the loops to 100 and multiplied the time by 100000 to stay in the same scale.) so the time increased by a factor 10 but the usleep only by a factor 1. and between 1 and 100.000 no diffrence wich is equal to a precision of 100ms, so it does not accept microseconds at all except zero. at a delay of 500000 microseconds the total of 10000 loops took 5000 seconds. so usleep works more like sleep(0.1) instead of usleep(1000) wich would be sleep(0.01);. there was a bug report earlier from php version 5.0.0 where it was said closed since new cvs snapshot contained the fix. now in php version 5.0.3 usleep still does not work, at least not wich microseconds or milisecond but deciseconds. also what if usleep read deciseconds instead of microseconds. because 100000 deciseconds is 100 seconds. should be time to get this fixed or removed it from documentation for a later point to be added again. hope this would help in fixing this problem, especialy for gtk apps its important that php does not use 100% cpu. its not a full-screen game or something. ps. actual times can be diffrent but its ofcourse about the scale not being correct. greetings from holland, Docey. Reproduce code: --------------- <?php // get starting time $start_time_raw = microtime(); $rounds = 0; // make some loops while($rounds != 10000){ $rounds++; usleep(0); } // note the quit time $end_time_raw = microtime(); // process time between start and end. list($end_time, $end_stime) = split(" ", $end_time_raw, 2); list($start_time, $start_stime) = split(" ", $start_time_raw, 2); $dif_time = 0; if($start_stime < $end_stime){ $dif_time = $end_stime - $start_stime; }else{ if($end_time < $start_time){ $dif_time = 1; } } $end_time_calc = $end_time + $dif_time; $run_time = $end_time_calc - $start_time; $ms_time = $run_time * 1000; // print actual results print("\n\n total run time ".$ms_time." miliseconds \n\n =>STR:".$start_time_raw."\n =>END:".$end_time_raw."\n =>RUN:".$run_time."\n =>DIF:".$dif_time); ?> Expected result: ---------------- that when the usleep increases by factor 10 the time to run would also increase by a factor 10 since there is no other delay in between. like running a loop of 10 times sleep(1) wich would be the same as running 10 times usleep(1000000). Actual result: -------------- usleep does not responds on values below 100ms(100000microseconds) and acts like sleep(0.1). ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=32203&edit=1