JeuWeb - Crée ton jeu par navigateur
Microtime() résultat négatif... - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Microtime() résultat négatif... (/showthread.php?tid=4265)

Pages : 1 2


Microtime() résultat négatif... - Argorate - 05-08-2009

Bonsoir,

J’aimerais savoir si l'un de vous connais la raison pour laquelle dans certains cas le fait de mesurer le temps d'exécution d'une page via une soustraction de microtime() est négatif? Et d'autres fois cela ne l'est pas?

C'est très bizarre...

Merci.


RE: Microtime() résultat négatif... - NicoMSEvent - 05-08-2009

microtime te renvoie une chaine avec 2 nombres : "nb_microsec nb_sec".

donc, si tu soustrait 2 nombres microtime sans les convertir, il va juste soustraire la partie des microsec. -> dans le cas ou il y a un passage de seconde, ton nombre sera négatif

petit exemple qui marche (repris dans la doc de php)
Code :
<?php
/**
* Fonction simple identique à celle en PHP 5 qui va suivre
*/
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

$time_start = microtime_float();

// Attend pendant un moment
usleep(100);

$time_end = microtime_float();
$time = $time_end - $time_start;

echo "Ne rien faire pendant $time secondes\n";
?>



RE: Microtime() résultat négatif... - nicodd - 05-08-2009

Ou même mieux, utiliser microtime(true) qui reverra un float plutot que la chaine avec les deux nombres...


RE: Microtime() résultat négatif... - Argorate - 05-08-2009

Excusez moi, je n’avais pas étais précis:

J'utilise l'exemple 2 du manuel php: http://php.net.pl/manual/fr/function.microtime.php

C'est donc effectivement avec des microtime(true) que j'obtiens parfois des résultats négatifs (quand la taches est longue a accomplir principalement), lors de la création de ma map monde par exemple.


RE: Microtime() résultat négatif... - guile - 06-08-2009

Officiellement rien ne peut expliquer un microtime négatif.

Il peut s'agir d'une mise à jour automatique de l'heure de ta machine.

Mais ceci n'est pas la raison si tu le constates sur un traitement qui dure longtemps.

Ensuite, il y a le fait de dépasser la limite d'un int (soit 2 ^ 31) ... mais ton traitement n'a pas non plus duré 68 ans ... :-D

Dernière solution, ta variable $start est égale à 0 ou n'est pas / plus définie. J'avais eu ce problème lors d'intégration d'applications externes. Pour le résoudre, j'utilisais $GLOBALS['start'] au lieu de $start.


RE: Microtime() résultat négatif... - Argorate - 07-08-2009

En utilisant deux variable directement égal à microtime(), je ne vois pas pourquoi ni comment ça pourrait être égal a zéro ou non définie Confused

D'ailleurs c'est leur soustraction qui est négative, car prise une par une elles sont positive et la première est donc plus élevé que la seconde -_-'


RE: Microtime() résultat négatif... - guile - 07-08-2009

A partir des informations que tu as fournies, on ne peut pas aller plus loin.
Tu es face à une étrangeté similaire au fait d'avoir vu la dame blanche cette nuit sur la route.
Tu auras beau nous dire ce que tu as vu, on ne pourra pas t'expliquer.

- Donne le résultat de ta soustraction
- passe ton code nettoyé
- affiche la valeur de ta variable $start


RE: Microtime() résultat négatif... - Anthor - 07-08-2009

C'est un bug connu, je ne me souviens plus la raison, ni la solution, mais c'est connu. Je vais essayer de retrouver ça.

L'idéal ça aurait été de voir ton code..


RE: Microtime() résultat négatif... - Argorate - 08-08-2009

Je vois pas vraiment ce le code change puisque comme je l'ai dit ça reviens a utilisé l'exemple #2 du manuel php:

Code PHP :
<?php
$time_start
= microtime(true);

[...
code que je ne peux donner ...]

$time_end = microtime(true);
echo (
$time_end - $time_start);

?>

Par contre -apres plusieurs essais- je ne retrouve plus la cituation où j'avais des chiffres negtifs. Impossible de vous donner des chiffres -meme si je vois pas ce que vous pourriez en faire.^^


RE: Microtime() résultat négatif... - Thedeejay - 08-08-2009

de toutes facons, microtime c'est le maaaal (oooooooooooooh ([Image: toy-story-aliens.jpg])

il faut utiliser $_SERVER['REQUEST_TIME'] Smile