Bonjour,
est ce qu'il y a un moyen en C pour décrémenter une variable avec le temps ? chaque 5min par exemple
et comment déclencher automatiquement un traitement quand elle arrive à 0 ?
Merci
Version imprimable
Bonjour,
est ce qu'il y a un moyen en C pour décrémenter une variable avec le temps ? chaque 5min par exemple
et comment déclencher automatiquement un traitement quand elle arrive à 0 ?
Merci
Bonjour,
un thread répondrait peut être à tes besoins.
Si ton programme ne fait rien d'autre que lancer une action toutes les 5 minutes, une simple boucle while / sleep suffira.
Bonjour,
Exemple d'algorithme :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 heure_actuelle = gettimeofday valeur = 42 Tant que valeur != 0 si (gettimeofday - heure_actuelle) % 300 == 0 alors valeur -- sinon dormir 1 s finsi fintantque action_a_executer_quand_valeur_vaut_0
Ben puisqu'on peut, en connaissant la valeur de départ de la variable et le temps intermédiaire, calculer le temps total avant 0, on peut alors remplacer la variable par un simple chrono.
On lance donc un alarm(chrono). Dès que le temps est écoulé, ton processus reçoit un signal SIGALRM que tu peux, si tu l'as relié via signal() à la fonction qui va bien, intercepter pour faire ton traitement...
Merci pour les propositions, mais je préfère expliquer un peu plus mon programme pour être plus clair :
-j'ai un socket server qui reçoit des messages bien définis concernant des adresse IP.
- à chaque message reçu, s'il trouve un élément de la liste avec cette adresse, il va incrémenter son attribut 'score', sinon il l'ajoute à la liste comme nouveau élément.
et c'est là où intervient ma question :
cet attribut 'score' doit être décrémenté au fur et à mesure, pour que si on ne reçois aucun message pour une entrée de la liste au bout d'un certain temps, on la supprime (si score=0 on le vire)
comme mon programme fait autre chose que cette tache, je ne peux pas utiliser une boucle while/sleep.
je vais essayer de voir cette histoire d'alarm si je peux l'utiliser, mais si vous avez d'autres propositions/explications je suis preneur.
Merci
PS : c'est mon premier prog en C !!!
Sous Windows, tu peux utiliser les fonctions dédiées de l'API :
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Le pb de alarm() c'est que ça ne s'active qu'une fois et que toute nouvelle activation remplace la précédente
Exemple: tu actives alarm(15) => le processus recevra un signal SIGALRM au bout de 15 sec.
3 seconde plus tard l'activation initiale (donc bien avant les 15 sec), tu actives alarm(7) => ce nouvel alarm remplace l'alarm(15) précédent => le processus recevra alors un signal SIGALRM au bout de 7 sec mais rien d'autre.
Donc pas facile de gérer plusieurs chrono avec une seule alarme...
Ben tu démarres fort !!!
Disons que ça se fait facilement par un petit calcul et la création d'un petit ensemble de 4 fonctions.. :D
Mais effectivement pour commencer c'est pas le plus facile :aie:
Note au P.O. : si tu tiens à faire ceci, il faut faire un tableau de structures, et faire une fonction qui enregistre un noveau timer, qui, elle, crée la structure correspondante, et calcule le prochain "tick" auquel il faut déclencher l'alarme (le minimum de délais de tous les timers enregistrés), et on pose l'alarme avec cette valeur...
J'ai le code dans un petit module, mais puisque nous sommes sur une partie débuter, je ne te le mettrais pas..
A toi de chercher un peu et proposer...
:D