Action executé periodiquement dans une boucle - Algo - Programmation
Marsh Posté le 19-03-2010 à 16:58:06
Dans tous les langages, tu as un équivalent de sleep
Code :
|
Marsh Posté le 19-03-2010 à 17:00:10
Pas con
Oui mais non, j'ai mis cet exemple simplifié mais en réalité, je fais d'autres choses à la place du sleep().
(C'est une boucle de multiplexage)
Marsh Posté le 19-03-2010 à 17:03:12
alors garde juste le timestamp de ta derniere action (nombre de seconde depuis 1/1/1970)
Marsh Posté le 19-03-2010 à 17:04:48
J'ai pas d'autres fonction de temps en dehors de ce getSecond();
Marsh Posté le 19-03-2010 à 17:06:34
tu devrais peut etre préciser ton langage
sinno, tu n'as pas de getminute ?
s - ps > ds || ( ps > ds && s +60 - ps > ds )
Marsh Posté le 19-03-2010 à 17:08:17
Citation :
|
Salut, c'est quoi cette condition ?
Si non, c'est quoi cet algo ?
A l'entrée dans la boucle, (si on entre) ps == 0 puis toujours 10.
Ce qui fait que tout les seconde, on vérifie que la seconde courante - 10 est supérieur à 10 pour faire le doaction.
C'est ça ?
Est-ce que mettre ps à 10, ds à 20 et faire s = getseceonde+10 non ?
Marsh Posté le 19-03-2010 à 17:14:43
Pas de langage, j'aurai pu l'écrire en pseudo code. (while(42) == while(1) == while(true) == boucle ad vitam eternam).
Je n'ai qu'une seule fonction getSeconds qui me retourne la seconde courante dans la minute.
Code :
|
Cet algo fonctionne tant que currentSecond est superieur à PreviousSecond,
Soit tant que currentSecond n'est pas revenu à 0;
Marsh Posté le 19-03-2010 à 17:17:17
Ben du incrémente une variable à chaque fois que tu repasse à zero et tu l'ajoute * 60
Marsh Posté le 19-03-2010 à 17:19:17
C'est effectivement une solution. Mais je cherche à ne pas avoir de variable incrémentale infinie. Je dois faire tourner cette boucle pendant les 8 prochains siècles.... (c'est une image hein )
Marsh Posté le 19-03-2010 à 17:21:13
http://fr.wikipedia.org/wiki/La_gr [...] t_le_reste
Tout le monde n'est pas un bête programmeur a l'esprit limité, certains ont une vision plus harmonieuse des choses, et expriment leurs idées les plus folles dans leur code. while(42) est une façon plus poétique d'exprimer l'infini, autrement que par les vulgaire while(1) et while(true).
Les solutions de manquent pas : while(PerformanceFrequency!=0), while(eax!=eax), while(0xFFFF+1==0)...
Personnellement j'utilise while(true!=false).
Marsh Posté le 19-03-2010 à 17:28:37
azubal a écrit : C'est effectivement une solution. Mais je cherche à ne pas avoir de variable incrémentale infinie. Je dois faire tourner cette boucle pendant les 8 prochains siècles.... (c'est une image hein ) |
N'essaye pas de tordre la cuillère, car la cuillère n'existe pas.
je vois pas d'autre solution. t'utilise une fonction qui te retourne une valeur bouclante, et toi tu veux un truc qui s'incrémente pendant huit siècle mais tu veux pas de variable qui te permette de le faire. C'est balot
Marsh Posté le 19-03-2010 à 17:31:40
Hum,
et si je fais ca :
Code :
|
Ca à l'air pas mal ca nan ?
Marsh Posté le 19-03-2010 à 17:37:47
J'ai un doute de tête ! Mais je crois pas que ça le fasse non plus.
T'as testé ?
Marsh Posté le 19-03-2010 à 18:54:43
et en utilisant le modulo?
Code :
|
après faut s'assurer qu'on rentre dans la boucle au moins une fois pas seconde...
Marsh Posté le 19-03-2010 à 19:51:35
ouip, a priori ca marche.
sinon le coup su modulo pose probleme car je n'itere pas a chaque secondes.
Marsh Posté le 19-03-2010 à 20:29:19
Et si on fait ça :
Code :
|
Marsh Posté le 19-03-2010 à 16:53:50
Salut à tous, je bloque sur la meilleur facon de représenter la chose suivante :
getSeconds); retourne les secondes courantes dans la minute (donc boucle de 0 a 59);
Le probleme c'est quand s est inférieur a ps car on a changé de minute...
Y'a il une façon simple de régler ce probleme ?