Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UNE FONCTION QUI DORT ======> SLEEP( SECONDE );


Information sur la source

Catégorie :Date & Heure Classé sous : sleep, dort, isnumeric, date, time Niveau : Initié Date de création : 15/12/2006 Date de mise à jour : 15/12/2006 14:49:11 Vu : 24 219

Note :
7,75 / 10 - par 4 personnes
7,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (54)
Ajouter un commentaire et/ou une note

Description

Salu a tous le monde,
je tiens a vous présenter une petite source de rien du tous mais
qui peux devenir une vrai aide pour certain programmeur,
qui recherche la fonction sleep( x );
qui existe dans bien des langages ( c/c++, Java, ... )

Je l'ai créer car j'en avait absolument besoin
pour un de mes script ( ^^ )"  [ Bien évidament ]
Mais je l'ai ossi diffuser pour permettre
a de nombreux programmeurs de pouvoir en profiter,
car énormément sont ceux qui la cherche....

Merci....
 

Source

  • // Fonction de "http://www.pbdr.com/vbtips/asp/JavaNumberValid.htm"
  • function is_numeric( strString )
  • // check for valid numeric strings
  • {
  • var strValidChars = "0123456789.-";
  • var strChar;
  • var blnResult = true;
  • if (strString.length == 0) return false;
  • // test strString consists of valid characters listed above
  • for (i = 0; i < strString.length && blnResult == true; i++)
  • {
  • strChar = strString.charAt(i);
  • if (strValidChars.indexOf(strChar) == -1)
  • {
  • blnResult = false;
  • }
  • }
  • return blnResult;
  • }
  • function DateInt()
  • {
  • var now = new Date();
  • var h = now.getHours();
  • var m = now.getMinutes();
  • var s = now.getSeconds();
  • return ( h * 60 * 60 ) + ( m * 60 ) + s;
  • }
  • function sleep( intTime )
  • {
  • if( !is_numeric( intTime ) )
  • {
  • return; // Arret de l'éxecution
  • }
  • intTime = ( intTime / 1000 );
  • var Exp = DateInt() + intTime; // TimeOut
  • while( Exp > DateInt() )
  • {
  • ;
  • }
  • }
// Fonction de "http://www.pbdr.com/vbtips/asp/JavaNumberValid.htm"
function is_numeric( strString )
//  check for valid numeric strings	
{
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;

	if (strString.length == 0) return false;
	
		//  test strString consists of valid characters listed above
		for (i = 0; i < strString.length && blnResult == true; i++)
		{
			strChar = strString.charAt(i);
			
			if (strValidChars.indexOf(strChar) == -1)
			{
				blnResult = false;
			}
		}

		return blnResult;
}

function DateInt()
{
	var now = new Date();

		var h = now.getHours();
	        var m = now.getMinutes();
       		var s = now.getSeconds();
				
	return ( h * 60 * 60 ) + ( m * 60 ) + s;
}

function sleep( intTime )
{
	if( !is_numeric( intTime ) )
	{
		return;  // Arret de l'éxecution
	}
		
	intTime = ( intTime / 1000 );
	var Exp = DateInt() + intTime; // TimeOut
		
		while( Exp > DateInt() )
		{
			;
		}
}

Conclusion

La fonction sleep( x ); a besoin de 2 autres fonctions pour son bon déroulement :

- la fonction DateInt() :
   Pour indiquer les heures, minutes et secondes de la journées sous forme de seconde


- la fonction is_numeric( X ) :
   Pour vérifier si X est numérique, notez que cette fonction n'est pas de moi,
   Et que je remercie c'est créateur....


Il est éventuellement possible que en indiquant
une valeur supérieur a environ 50 voir 60 secondes,
que le navigateur ne réagissent plus pendant une courte période....
 

Historique

15 décembre 2006 14:49:11 :
Juste la mise en paGe ^^"

Commentaires et avis

signaler à un administrateur
Commentaire de FREMYCOMPANY le 15/12/2006 15:01:28

        while( Exp > DateInt() )
        {
            ;
        }


Tout juste bon pour user tout le CPU...
Bof quoi...

signaler à un administrateur
Commentaire de wizard512 le 15/12/2006 15:52:01

Effectivement c'est asser lourd,
mais je n'ai pas trouver d'autre solution,
et en plus c'est lourd qu'avec de grosse valeur,
genre : sleep( 60000 ); // 1 minute
La effectivement vous poouvez rencontrer des problemes,
avec les gros valeurs...  ^^"

Si quelqu'un a une autre idée afin d'amélioré le script
pas de problème....   ^^

Merci

signaler à un administrateur
Commentaire de FREMYCOMPANY le 15/12/2006 16:13:45

Moi j'utilise setTimeout et un callBack du style :
<<<
function f(callBack) {
   var x = 3;
   setTimeout(function f2() {
      callBack(x);
   }, 60000)
}

f(function(x) { alert(x) });
>>>
Mais je reconnais que c'est pas tjrs évident...

signaler à un administrateur
Commentaire de wizard512 le 15/12/2006 16:41:49

Certe c'est pas spécialement évident comme tu la dis,
mais né-enmoin sa peux rendre service et trés bien servire
donc si tu pourais en faire une fonction ou une classe,
et le déposer en tant que nouvelle source
sa aiderai pas mal de gens,
ou alors si tu souhaite, tu peux trés bien m'aider
( si tu as envie bien sur ) a develloper,
ce script, pour obtenir une meilleur fonction sleep( x );
ou alors participer en indiquant les changement éventuel qui
peux etre fait & nous indiquer de nouvelles idées...

Merci....

signaler à un administrateur
Commentaire de Arto_8000 le 15/12/2006 17:27:58

Petite remarque, il existe déjà une fonction javascript pour vérifier si une valeur n'est numérique ( isNaN ).

signaler à un administrateur
Commentaire de rrk275 le 15/12/2006 17:50:55

Tout comme d'autre je trouve ce code pas specialement interressant ...

signaler à un administrateur
Commentaire de wizard512 le 15/12/2006 19:02:30

Merci ARTO_8000 je croyer que isNaN server juste pour vérifier
si la variable n'étais pas "NaN"   ^^'
Je ne savais pas quelle avait aussi cette fonction...

RRK275 : Peut etre mais les autres au moin, il avance des arguments, contrairement a toi, donc ton poste ne sert a rien,
sans arguments.....

Merci...

signaler à un administrateur
Commentaire de rrk275 le 15/12/2006 20:34:50

Pas interressant ou une veritable fonction sleep sert a permettre le relachement du CPU pendant un certain temps ( ce dans un language evidemment pas web .. ) mais là elle bloque tout ...
dsl il est vrai du cote austère de mon post.
Ce que je voudrais c'est pas que tu change de code ou dire que ce tu fais est inutile mais que tu nous explique en quoi elle te sert plus qu'un simple setTimeout ..

Louis

signaler à un administrateur
Commentaire de wizard512 le 15/12/2006 23:09:35

Ah, ok
La, je suis tous a fait d'accord,
a vrai dire maintenant que j'y suis,
mon script n'est vraiment pas bien adapté a la fonction initial,
donc je te remercie pour tes remarque trés constructives,
et je m'en vais vite trouver une autre solution,


Merci.....

signaler à un administrateur
Commentaire de coucou747 le 16/12/2006 10:35:04

à mon avis, setTimeOut suffit largement pour la gestion du temps... Si on découpe correctement son programme, ça suffit, et ça ne mange pas trop de ressources...

signaler à un administrateur
Commentaire de wizard512 le 16/12/2006 13:09:35

Je suis d'accord mais serait il possible de le formuler sous forme
d'une fonction plus simple, pour une utilisation plus simplifier....

  Genre : sleep( 0.5 ); // demi seconde

Meme pour les débutants, pour qu'il soit utilisable par tous les nivo
et type de programmeurs....

signaler à un administrateur
Commentaire de jesusonline le 17/12/2006 22:46:39 administrateur CS

setTimeout ne suffit pas dans certains cas car il lance un nouveau "thread" on perd le contexte local et cela demande vraiment beaucoup de code pour un simple sleep ...

Bref, la fonction sleep peut être utile et la boucle semi infini est la seule solution. Bien sur ton code peut être simplifié :

var sleep = function(timer){
     if (typeof(timer) != 'Number')
         return false;
     var d = new Date();
     d.AddMilliseconds(timer);
     while(d > (new Date()));
     return true;
}

signaler à un administrateur
Commentaire de wizard512 le 17/12/2006 23:18:18

le bout de code ne fonctionne pas,
mais le problème principale est le même, non..?

C'est la boucle While qui bouffe tous le procéssus,
ou me serai-je trompé...?

signaler à un administrateur
Commentaire de jesusonline le 18/12/2006 01:17:36 administrateur CS

Ben voila c'est malin de poster du code sans même le tester ... tsss bête que je suis :-)

Voici une version testé (j'étais pourtant sur que l'objet Date avait une méthode addMilliseconds) :

Date.prototype.addMilliseconds = function(milliSeconds){
    this.setMilliseconds(this.getMilliseconds() + milliSeconds);
}
var sleep = function(timer){
     if (typeof(timer) != 'number')
         return false;
     var d = new Date();
     d.addMilliseconds(timer);
     while(d > (new Date()));
     return true;
}

Ce code est l'équivalent de celui posté par wizard512 il est juste un peu plus propre ;-)

Il ne résoud bien sur pas le problème qui est que pour faire patienter on fait "une boucle infini" mais il n'existe pas d'autres solutions pour faire un sleep simplement en restant dans le context et le "thread" courant. Cela peut être utile dans les cas on l'on veut attendre seulement quelques centaines de ms, dans tous les autres cas il vaut mieux repenser son architecture en utilisant un setTimeout

signaler à un administrateur
Commentaire de wizard512 le 18/12/2006 18:16:11

Tester et aprouvé  ;)         lol

Bon donc, résumon, pour toute attente asser courte,
on peux utilisé la fonction sleep( int ) qui elle fait une boucle
a l'infinie
( enfin pas vraiment mé bon ^^" dans la limite du temps quoi )

Mais parcontre pour toute attente moyenne voir longue,
il faut mieux utilisé le setTimeout() qui elle bouffe légèrement,
voir largement moin de CPU,
donc qui est plus agréable et moin dangereux....

La fonction sleep pour toutes attente ne sera donc qu'un fantasme
du programmeur...?    :p    lol

Cordialement DotWizard512

signaler à un administrateur
Commentaire de coucou747 le 19/12/2006 13:15:15

testé et approuvé... résumons, pour toute attente assez courte, on peut utiliser la fonction sleep... (mais uniquement si on ne peut pas facilement faire autrement...)

sleep n'est pas un fantasme, personellement, je ne l'utilise qu'en php pour faire des choses comme attendre un message d'un serveur pour un logiciel comme IRCcgi, ou bien en java pour attendre entre deux ittérations (dans un mini jeu) mais en java, je pourrais faire autrement si j'avais un settimeout...

Bref, souvent, on peut faire sans sleep...

signaler à un administrateur
Commentaire de FREMYCOMPANY le 21/12/2006 19:57:30

J'ai une solution pour la boucle infinie...

Pour ne pas consommer tout le CPU, on pourrait faire une requête "HEAD" AJAX en mode synchrone sur un fichier qui n'existe pas, ainsi, le temps de réponse et de transfert est très court ! Malgré que ce temps soit cours, cela suffit pour ne pas user tout le CPU !

Qu'en pensez vous ?

--------------------------------
N'empeche que je reste convaincu qu'on peut faire plein de chose sans fonction sleep...

signaler à un administrateur
Commentaire de wizard512 le 22/12/2006 20:12:12

Et pour ceux qui n'on pas Ajax...?
Les navigateurs pas compatible...?

--------------------------------
N'empeche que je reste convaincu
qu'on peut faire encore plus de
chose avec la fonction sleep...   ^^

signaler à un administrateur
Commentaire de FREMYCOMPANY le 24/12/2006 20:05:31

J'y avais pensé, mais je ne l'ai pas indiqué :

Pour eux, ben le CPU sera au max hélas... A moins que vous ne voyez une autre solution ?

try {
   // AJAX Stub
} catch (ex) {}

signaler à un administrateur
Commentaire de wizard512 le 24/12/2006 23:45:53

Ta proposition pour la solution avec ajax,
est aléchante, mais maleureusement inadapté,
le but serai de trouver un facon de faire passienter,
tous le monde, quelque soit le navigateur [ IE, MOZILLA, ... ]
tant qu'il est évoluer ( pas quand mode texte )
et non d'exclure une partis d'entre eux...

Mais maleureusement je ne vois pas de solution     :(
Quelqu'un aurait une solution....?

signaler à un administrateur
Commentaire de FREMYCOMPANY le 25/12/2006 12:03:38

IE et Mozilla peuvent tous les deux faire de l'AJAX...

La dernière version d'OPERA le fait aussi, et il me semble que les navigateurs basé sur KHTML (linux) en sont capables aussi...

Safari prend lui aussi en charge AJAX.

Quel navigateur reste-t-il ?

signaler à un administrateur
Commentaire de FREMYCOMPANY le 25/12/2006 12:10:53

Je crois qu'aujourd'hui tous les navigateurs un tant soit peu utilisés sont compatibles AJAX ;)

signaler à un administrateur
Commentaire de wizard512 le 25/12/2006 14:34:52

Oui effectivement mais apres sa depent de la version,
si je me trompe pas toutes les versions
ne prennent pas en compte Ajax....?

signaler à un administrateur
Commentaire de FREMYCOMPANY le 25/12/2006 16:13:47

Oui, c'est évident... Mais qui utilise encore IE 5 ? FireFox 0.x ?
Le seul cas que je vois c'est Opéra 8, qui a peut-être encore des utilisateurs, vu que je ne crois pas que la mise à jour étaient proposée automatiquement (ou c'est moi qui ait installé OPERA 9 avant qu'on ne me propose celle-ci ?)
D'un autre coté, c'est vraiment minoritaire et négligeable...
Quand on pense au nombre de site qui utilisait déjà AJAX alors que seul IE était compatible... Il faut mettre à jour son navigateur ou subir les inconvénients...

signaler à un administrateur
Commentaire de FREMYCOMPANY le 25/12/2006 16:34:25

Par contre après test :
- si le fichier n'existe pas, ca ne marche pas (la requête va trop vite)
- si le fichier est trop petit, pareil
- si le fichier est trop grand, le temps de sleep pourrait être faussé, je vais faire des recherches pour savoir quelle taille adopter...

signaler à un administrateur
Commentaire de FREMYCOMPANY le 25/12/2006 17:12:16

Finalement j'ai trouvé mieux...
Plutot que de mettre une taille à un fichier, ce qui est dangereux car la vitesse de transfert peut varier d'une connection à l'autre (et donc le temps d'un XHR), j'ai décidé d'appeler, via xhr, le sleep du langage serveur !

Bien sur, si le temps demandé à sleep est faible (moins de 250 ms), alors il n'y a aucun intérêt à faire un requete au serveur, j'ai donc mis cette limitation.

SLEEP.HTML
<<[[
<html><body><script>//<!--
/** This code is a part of Prototype 1.4 for FC Web API 3.0 **/

// Renvoie le texte de l'objet ActiveXObject le plus récent depuis une liste
var pickRecentProgID = function (idList){
// found progID flag
    var bFound = false;
    for(var i=0; i < idList.length && !bFound; i++){
        try{
            var oDoc = new ActiveXObject(idList[i]);
            o2Store = idList[i];
            bFound = true;
        }catch (objException){
            // trap; try next progID
        };
    };
    if (!bFound)
throw ("Aucun ActiveXObject n'est valide sur votre ordinateur, pensez à mettre à jour votre navigateur");
    idList = null;
    return o2Store;
}

// Retourne un nouvel objet XmlHttpRequest
var getXmlHttpRequest_AXO=null
var getXmlHttpRequest=function () {
if (window.XMLHttpRequest) {
return new XMLHttpRequest()
}
else if (window.ActiveXObject) {
if (!getXmlHttpRequest_AXO) {
getXmlHttpRequest_AXO=pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]);
}
return new ActiveXObject(getXmlHttpRequest_AXO)
}
return false;
}

// Compatibilité au tutoriel
getXhr=getXmlHttpRequest;

function sleep(ms) {
    var startDate=new Date()
    var i=0; var e=0; var time=0;
    while (time < ms) {
        try {
            if ((ms-time) > 249) {
                var xhr=getXhr();
                xhr.open("GET","/JS/wait.aspx?date=" + escape (new Date()) + "&time="+(ms-time),false);
                xhr.send(null);
                i++;
            }
        } catch (ex) { e++; }
        time = new Date().getTime() - startDate.getTime()
    }
    document.write(i + " appels XHR pour une durée totale de " + time + " ms.<br/>");
}

sleep(5000);
sleep(100);
sleep(1);

//--></script></body></html>
]]>>

Et WAIT.ASPX
<<[[
<%@ Page Language="VB" %>
<%
    Dim Time As Integer = CInt(Request("time")) - 500
    If Time < 0 Then Time = 0
    Threading.Thread.Sleep(Time)
    Response.ClearHeaders()
%>
]]>>

Pour PHP (que quelqu'un qui connaisse PHP valide ce que j'ai tapé)
<<[[
<?
   $time = $_GET["time"];
   sleep($time)
>
]]>>

signaler à un administrateur
Commentaire de wizard512 le 25/12/2006 17:32:42

Ouai a vu de nez sa peux etre une solution mais
il reste toujours un inconvénient, parseque comme tu la di,
sa dépend de la connection de chaqun,
en gros il y aura le sleep demander + le ten de la requete
( qui peut varié énormément selon les connections )

Donc dans certain cas sa peux donner des résultats
largement plus long...

P.S.:

<?Php
  
   if( isset( $_GET[ 'time' ] ) && is_numeric( $_GET[ 'time' ] ) )
   {
      sleep( $_GET[ 'time' ] );
   }
?>

signaler à un administrateur
Commentaire de FREMYCOMPANY le 25/12/2006 20:15:12

La variation sera courte, vu qu'il n'y a que les headers à transmettre !

Dans ma version ASP .Net, je vide tous les headers à la fin, ce qui fait qu'il ne reste que le strict minimum à transmetre... Et le temps de connection est comptabilisé dans la version .Net car je soustrait 500 à time (mais je ne sais pas suffisement PHP pour me risquer à faire des opartions complexes comme la modification des headers, la conversion de données, ...).

Deplus, comme je l'ai dit, pour les sleep de moins de 250 ms, il n'y a pas de requête...

Et chez moi, selon mes test, ca marche très bien... Evidement, on ne peut pas en jurer pour tout le monde (connection lente)

signaler à un administrateur
Commentaire de FREMYCOMPANY le 25/12/2006 20:15:39

Au fait, merci pour la version PHP !!

signaler à un administrateur
Commentaire de wizard512 le 25/12/2006 20:58:03

Pour le Php sa doit pas etre tros différent,
je vais voir en combient de temps,
et je le communique,
mais sa doit pas etre trés différent a mon avie,
de rien pour la version php....

je fais les testes et je le poste ici....

signaler à un administrateur
Commentaire de wizard512 le 26/12/2006 03:12:31

Cher moi sa a crasher dans 90% des cas lol,
mais sinon au nivo de temps c'est casiment exacte,
il n'y pas une grosse différence....

bon sa peux etre effectivement une solution, pourquoi pas,
mais il faudrait créer des systemes de vérifications,
parce que, sinon nimporte quel idio pourra utiliser la fonction sleep()
du serveur concerné a partir de nul part, se qui pourait le faire saturé....

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 12:33:21

Oui, en effet ;)
Et tu dis que ca plante dans 90% des cas ???
Chez moi je n'ai eu aucun problème...

signaler à un administrateur
Commentaire de wizard512 le 26/12/2006 13:45:50

Oui bof sa doit venir de moi sa je crois,
tros tros d'application en même temps,
donc faut pas sens faire...

Donc en gros cette solution est potable....
Et peux etre utilisé par les serveurs sous Asp et Php     ^^
A exploiter donc, tu peux la formuler et la poster en source,
pour quoi pas, tu le poste en source javascript,
mais qui conserne aussi le php / Asp pourquoi pas....

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 14:15:39

Ne serait-ce pas plus simple que tu édite la tienne de manière à proposer les deux solutions ? Ca va plus vite que tout reposter et surtout ca ferait doublon, tu ne penses pas ?

Tu sais, je suis pas du genre à poster une source juste pour que mon compteur de sources augmente ;)

C'est toi qui a initié le mouvement, tu peux disposer à ta guise de ma source ;)

De toute facon, maintenant qu'elle est mise dans les commentaires, elle peut être trouvée par n'importe qui qui cherche bien ;)

signaler à un administrateur
Commentaire de wizard512 le 26/12/2006 14:48:20

Joli geste,
je vais faire comme tu ma di,
j'édite ma source en remplaçant le contenue,
et surtous j'indiquerais de qui est la source....

signaler à un administrateur
Commentaire de Arto_8000 le 26/12/2006 16:52:12

Pour règler le fait que certaine personne on une connection plus lente voici une petite modification qui fonctionnerait mieux, car il tiendrait compte de quand est parti la requête de sleep.

<script type="text/javascript">
function sleep (timeToWait)
{
time = new Date().getTime()+timeToWait;
...
On fait la requête.
...
}
</script>

<?php
$toWait = $_GET["time"]-time();
if ($toWait < 0)
die("");

sleep($toWait);
?>

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 17:41:04

Intéressant, mais il faudrait peut-être penser au fait que la requête part... mais revient aussi ;)

signaler à un administrateur
Commentaire de wizard512 le 26/12/2006 18:09:18

Effectivement,
il faudrait aussi prendre en compte le fait que la requete revient
on pourais faire comme ceci :

* Client  : Prise de la date présisément
* Client  : Envoya la requete avec la date prise et le temps du sleep()
             et attend la réponse....

* Serveur : Calcule le temps restant a attendre,
             en fonction de la variable sleep et aussi du temps de la requete,
             spécifier par le Client ( date ) [ Le Serveur le calcule ]
* Serveur : Fait attendre ( x ms ).....
* Serveur : Retourne un caractère signifiant que la requete c'est bien effectuer

* Client  : ....Fin ( Aprés que le caractère de confirmation ai bien été recu )



Sa tente quelqu'un sa...?

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 18:24:27

Lol, ben moi je suis bien content avec mon :
<<[[
    Dim Time As Integer = CInt(Request("time")) - 500
    If Time < 0 Then Time = 0
]]>>

On enlève 500 ms pour la requête et à moins que celle-ci ne dure moins de 250 ms, on ne risque pas d'avoir de nouvelles requetes ;)

Evidemment, si qqun a envie de modifier le script, je laisse faire xD

signaler à un administrateur
Commentaire de jesusonline le 26/12/2006 18:48:20 administrateur CS

Et pourquoi ne pas tout simplement utiliser la méthode abort de l'objet XMLHttpRequest ?

En gros ca donne ça (j'écrit directement le code, je test pas ! :p)

var sleep = function(milliseconds){
    var xhr = createXHR();
    xhr.open("GET","/JS/wait.aspx?ms="+milliseconds,false);
    window.setTimeout(function(){
        xhr.abort();
    }, milliseconds);
    xhr.send(null);
}

Je pense que ca devrait fonctionner, bien sur faudrais mettre ca dans un objet pour avoir un pool de requete "wait" etc, ...

Côté serveur on envoit quand même le temps du wait même si le client n'attendra pas sa réponse ... on pourrais aussi mettre un temps d'attente "infini" mais inutile de bouffer des ressources inutilement :-) Pour ASP.net on pourrait utiliser les Pages Asynchrone histoire de pas bouffer un thread du pool d'application pour rien ;-)


Mais c'est une MAUVAISE approche, le client ne peut faire que 2 requêtes XHR à la fois si on fait 2 wait on ne pourra plus faire un vrai XHR avant que le premier wait soit finit ... c'est donc une très mauvaise approche que je n'utiliserais jamais ! Je ne vois aucun interêt à réinventer la méthode sleep, dans la vrai vie elle ne sert jamais (à part pour le debug) settimeout est beaucoup plus utile vu qu'il ne bloque pas le "thread" courant ...
Si quelqu'un a un exemple concrêt de l'utilisation de la méthode sleep (à part pour du debug) je suis preneur :-)

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 19:06:58

Pas bête l'histoire du abort... ca marche avec tous les navigateurs ?

-----------------------
Quelle est cette histoire de limite de XHR ?
C'est réel ? J'avais jamais lu ca moi...

---------------------
Oui, j'ai des exemples ;)
Imaginons que je veuilles remplacer la méthode alert par une fonction au fonctionnement similaire (thread blocé tant que l'utilisateur n'a pas répondu) je n'ai pas d'autre choix de de faire un while portant sur la fermeture de ma div "WebForm" ==> Ca bouffe tout le CPU ==> L'utilisateur sait pas cliquer sur OK ==> Ca marche pas...

Avec sleep, je peux faire while (xxx) { sleep (1000); } et ainsi bloquer le thread tout en permettant à l'utilsateur de répondre !

Et ainsi tu peux faire des boites de dialogues "modales" personalisées de tout type (Retry - Ignore - Cancel, OK - Cancel, YES-NO, ...)

Enfin, c'est un exemple comme ca ;)

Autre idée, si on veut charger une iframe, et bloquer un thread tant qu'elle est pas chargée (ou arrêtée) (ou, pour si on ne détecte pas l'erreur plus de X seccondes), sans sleep, c'est impossible...

Sinon, en effet, il faut mieux se passer de sleep si besoin (d'ailleurs avant je l'avais pas et j'ai bien fait sans !)

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 19:10:50

L'exemple de remplacement de alert est d'autant plus judicieux que prompt ne marche plus (par défaut) sous IE 7 ;)

signaler à un administrateur
Commentaire de jesusonline le 26/12/2006 19:23:58 administrateur CS

prompt marche pas par défaut sous IE7 ??? ah bon et depuis quand ?

Pour ton histoire de fenêtre modal, j'ai rien compris ! D'accord sous FF la fonction alert ne block pas le thread mais qu'est-ce qui t'empeche, comme tu le dis, de coder une fonction modalPopup et de t'abonner à des events ?

Pour ce qui est des limitation il me semble qu'un navigateur ne peut ouvrir que 4 connexions au total par domaine : 1 fichier HTML, 2JS, 1 CSS, et ne peut faire que 2 XHR. C'est en grande partie l'experience qui me dit ça donc je sais pas si c'est vrai pour tous les navigateurs et s'il y a une référence la dessus ...

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 20:34:47

He he, ben depuis que c'est "dangereux" ;)
<<[[
IE7 and the JavaScript Prompt

IE7 has shipped and its probably (by and large) a decent browser now. But of course it wouldn't be Microsoft if they didn't mess up something. First in what will probably be a long line of security related "features", Microsoft have decided to modify the way that the good old JavaScript prompt works.

The reason? Phishing sites impersonating or even superimposing themselves on real web sites were using the prompt to lure gullible users into providing credit card numbers, passwords and all sorts of powerful data. So now whenever a web page wants to use a prompt you have to click on the unnoticeable security bar at the top of the browser and "allow" temporary access. To make matters worse the prompt presented is ugly and out of place.

I'm not saying that a prompt is the best way to ask the user for data, but given the whole Web 2.0 movement there are numerous occasions where the prompt is a useful and elegant solution to on-the-fly input. The worst part is that the unscrupulous underbelly of the internet will end up using a modal window or a clever floating div about 15 seconds after they realize their old technique doesn't work and then who loses? Why, the web 2.0 programmer that thought a JavaScript prompt was a no-brainer in terms of cross-browser support.

Phishing works because people are stupid, making your browser idiot-proof is a surefire way to drive yourself crazy.

Score one for stupidity.
]]>>

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 20:41:51

Ben en fait je compose (tu sais pour mon API JS) un gestionnaire de fenêtre (style youOS, JSWin, ...) "windows-like"...

J'aimerais que mes fenêtres puissent demander à l'utisateur de faire un choix et qu'elles bloquent le thread qui a ouvert la fenêtre tant qu'aucune réponse n'a été fournie (comme prompt, alert sous IE, confirm, ...)

Ainsi, on peut changer les icones, ... et personnaliser la fenêtre...

Sans sleep, c'est impossible.

Et ouvrir une fenêtre modal et s'abonner à ses events :
1) C'est plus long à coder
2) On peut moins personaliser (mettre la barre de titre au couleurs du site, ...)
3) C'est pas toujours possible

signaler à un administrateur
Commentaire de FREMYCOMPANY le 26/12/2006 20:43:29

Pour la précision, toutes les fenêtres n'auront pas se comportement la :
"J'aimerais que mes fenêtres" ===> "J'aimerais que certaines de mes fenêtres"

signaler à un administrateur
Commentaire de FREMYCOMPANY le 27/12/2006 13:13:28

3) C'est pas toujours possible
Un exemple comme ca :

Sur un event onsubmit, je voudrais demander à l'utilisateur de valider ses données en affichant une fenêtre dans laquelle je puisse mettre du HTML et permettre à l'utilisateur de valider (return true;) ou refuser (return false;)...

Comment tu veux faire avec une fenêtre ouverte + abonnement aux events ?

signaler à un administrateur
Commentaire de stfou le 31/03/2007 22:26:48

La fonction sleep existe-t-elle en vbscript ? Parceque on peut transférer les objets javascripts en vb et inversement (voir ma source)

signaler à un administrateur
Commentaire de FREMYCOMPANY le 01/04/2007 12:54:18

VBScript = IE-Only = Mauvaise solution :(

signaler à un administrateur
Commentaire de stfou le 01/04/2007 17:13:38

effectivement... j'avais pas pensé

signaler à un administrateur
Commentaire de Eregon le 03/09/2007 18:12:53

Voici un autre exemple pour la fonction sleep:

Dans le cadre d'une modification de place des images, il peut-être utile d'attendre un peu sinon on arrive directement au résultat et le client ne voit pas l'effet...

J'ai lu le topic mais je ne comprends pas bien les fonctions setInterval() et setTimeout().

Si qqn voulait bien faire la fonction sleep avec une de ces fonctions,j'en serait grandement reconnaissant...

Pour info, je fait une rotation d'images autour d'un point et il faut donc attendre entre chaque degré de rotation pour voir l'effet.

signaler à un administrateur
Commentaire de FREMYCOMPANY le 03/09/2007 18:21:19

setInterval(function() {
   // Cette fonction se lance toutes les {nbSeconde} seconde(s).
}, nbSeconde * 1000)

setTimeout(function() {
   // Cette fonction se lancera une seule fois dans {nbSeconde} seconde(s).
}, nbSeconde * 1000)

Tu peux aussi faire setTimeout(uneFonction, nbSeconde * 1000)

signaler à un administrateur
Commentaire de FREMYCOMPANY le 03/09/2007 18:23:52

pour arrêter un timer, il faut faire clearInterval(timerID).
pour empêcher une exécution décalée, il faut faire clearTimeout(timerID)

timerID est la valeur de retour de setInterval/setTimeout

signaler à un administrateur
Commentaire de Eregon le 03/09/2007 18:33:41

Mon problème est qu'en fait j'ai une boucle basée sur les degrés de rotation. Voici le code,ce sera plus simple:

deg=valeur d'un degré
rotation = cmb de degrés de l'angle ont été faits

function rotate(sens)
{
for( var rotation = 0; rotation <= angle; rotation += deg )
{
//modification des attributs top et left des images avec comme parametre externe: rotation(pour els fonctions sin et cos)
->>>sleep(250);//la j'aimerait attendre environ .25s ou 250ms
}


}

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Calcul de DATE avec JavaScript [ par Dzeus ] Salut, G besoin d'ecrire une fonction qui renvoie le nombre de jour exact écoulé entre deux dates ; exemple..20/02/2001 et 5/03/2001...ATTENTION : Il Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression [ par lise ] Voici mon prb:je récupère 1 champs issue de ma base access à l'aide d'1 requête sql en asp, ce champs c 1 date je la stock dans une variable: "dat(j)" Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression [ par lise ] Voici mon prb:je récupère 1 champs issue de ma base access à l'aide d'1 requête sql en asp, ce champs c 1 date je la stock dans une variable: "dat(j)" Afficher la date de dernière modification [ par PsyCaDi ] Bonjour,Comment fait-on pour afficher la date de dernière modification sur une page HTML? (peu importe le langage)Merci Saisie de date en asp [ par breakdancer971 ] Bonjour,j'utilise dreamweaverMxj'ai créé un formulaire ou l'on doit saisir des dates et lorsque je les enregistre quelque soit le format soit access o HORLOGE À AIGUILLES QUI TOURNENT AVEC LA DATE [ par profnaimbus ] Bonjour,j'ai un problème avec le script HORLOGE À AIGUILLES QUI TOURNENT AVEC LA DATE, je n'arrive pas à le faire fonctionner pouvez vous m'aider??? calcul d'un nombre de jours entre deux dates [ par borisV ] Bonjour, je cherche à calculer (et afficher...) un nombre de jours en tapant une date d'arrivée et une date de départ.En fait, il faudrait peut-être s date [ par Cristalline ] Comment comparer la date d'une base de données avec celle d'aujourd'hui en javascript?Et comment faire pour l'afficher que si elle est supérieur à cel date [ par natnat ] bonjor,je suis en stage et ds une panade complete, si qq'1 pouvait m'aider, ce serait super coolje passe à suivre la fonction que j'ai copié et adapté Afficher Date Heure en cours sur page web [ par charlybegood46 ] Bonjour,Je cherche à afficher la date et l'heure actuelle dans une page web!Merci pour votre aide. Tout est pour le mieux dans le meilleur des mondes


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.