begin process at 2012 05 27 20:18:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date & Heure

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :34 035

Auteur : wizard512

Ecrire un message privé
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 ^^"

 Sources du même auteur

Source avec Zip Source avec une capture PRECHARGEMENT D'IMAGE(S), AVEC BARRE DE PROGRESSION ( DIFFÉR...
Source avec Zip Source avec une capture AJAXSIMPLIFIER EN UNE SEUL FONCTION ( GET && POST )
UNE FONCTION POUR LA GESTION DU CLAVIER ET UNE AUTRE POUR L'...
Source avec une capture BAR DE STATUS POUR LE CHARGEMENT DES IMAGES AVEC POURCENTAGE...
LISTER LES PLUG-INS INSTALLÉ DU BROWSER (IE SEULEMENT)

 Sources de la même categorie

NOMBRE DE JOURS, MOIS ET ANNÉES DEPUIS LA NAISSANCE par marcenana
Source avec Zip CALENDRIER ANNUEL UNIVERSEL AVEC SAINTS DU CALENDRIER ET FÊT... par 007Julien
OBTENIR LE NOMBRE DE JOURS D'UN MOIS SUIVANT SON ANNÉE par hugolegrand
SAINT DU JOUR par tefa24600
Source avec Zip Source avec une capture NIPCLOCK 1.2 par neep

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture NIPCLOCK 1.2 par neep
Source avec Zip Source avec une capture HORLOGE TRIPLE AFFICHAGE AU FORMAT AM/PM/24H/DST par sofiane1234
Source avec Zip Source avec une capture HORLOGE NUMÉRIQUE EN JAVASCRIPT, COMPATIBLE IE ET FF par bad_dark_spirit
Source avec Zip UN CHAMP DE SAISIE DE DATE par guykoumba
Source avec Zip HEURE, DATE DU JOUR DE L'INTERNAUTE ET FÊTE À SOUHAITER. par sneezy

Commentaires et avis

Commentaire de FREMYCOMPANY le 15/12/2006 15:01:28

        while( Exp > DateInt() )
        {
            ;
        }


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

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

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...

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....

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 ).

Commentaire de rrk275 le 15/12/2006 17:50:55

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

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...

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

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.....

Commentaire de coucou747 le 16/12/2006 10:35:04 administrateur CS

à 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...

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....

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;
}

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é...?

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

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

Commentaire de coucou747 le 19/12/2006 13:15:15 administrateur CS

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...

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...

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...   ^^

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) {}

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....?

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 ?

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 ;)

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....?

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...

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...

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)
>
]]>>

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' ] );
   }
?>

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)

Commentaire de FREMYCOMPANY le 25/12/2006 20:15:39

Au fait, merci pour la version PHP !!

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....

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é....

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...

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....

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 ;)

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....

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);
?>

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 ;)

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...?

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

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 :-)

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 !)

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 ;)

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 ...

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.
]]>>

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

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"

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 ?

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)

Commentaire de FREMYCOMPANY le 01/04/2007 12:54:18

VBScript = IE-Only = Mauvaise solution :(

Commentaire de stfou le 01/04/2007 17:13:38

effectivement... j'avais pas pensé

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.

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)

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

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

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales