Timer

falcon971 Messages postés 5 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 26 novembre 2005 - 26 nov. 2005 à 21:18
huben Messages postés 13 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 27 février 2006 - 27 nov. 2005 à 14:02
Bonjour, je cherche à réaliser un timer sous linux en C.
Après toute mes recherche sur le net je n'ai pu trouver de version correspondant à mon cas.
Je m'explique, je veux que mon appli fasse la chose suivante.

main()
{
int flag=1;
start_timer(500ms);
while(flag)
{
//Faire des taches
}
}
la fonction start_timer après les 500ms changera la valeur de flag en 0.
J'ai presque réussi à faire cela avec des fonctions alarm, setitimer, et le signal SIGALRM comme indiqué à l'adresse suivante :
http://www.delorie.com/gnu/docs/glibc/libc_488.html
Mais moi je voudrais intégrer tout cela dans la même fonction (start_timer), mais pour faire cela il faut que je transmette l'adresse du paramètre flag afin que la fonction puisse le modifier, et c'est là qu'arrive les problèmes (Segmentation Fault).

Pourriez vous m'aider à résoudre ce problème?
merci d'avance.

6 réponses

shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
26 nov. 2005 à 21:22
tu peux faire un Sleep(time); ou tu definie le temps a attendre et une fois le sleep terminé faire ce qui doit se passer





if(Sleep(time))

{

//action



}
0
falcon971 Messages postés 5 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 26 novembre 2005
26 nov. 2005 à 21:29
non je ne veux pas un sleep puisque le sleep bloquera les actions à effectuer dans le while, je veux que les actions bouclent tant que le timer n'est pas arrivé à 0. je ne sais pas si je m'explique bien.
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
26 nov. 2005 à 21:46
ouai j'comprend, dsl j'veu t'aider mais sur ce coup la j'peux vraiment
pas, moi j'ai toujours utiliser sleep car je voulais que l'action se
fasse une fois le sleep fait mais si tu veux que ca se fasse tant que
le timer n'est pas a zero a part une magouille du style



int fin = 2000;

while(fin != 0)

{

ton action

fin--;

}


sachant que ca varira en fonction de se que ca fait mais que ca fait environ un milieme de seconde, sinon j'vois pas
.
0
falcon971 Messages postés 5 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 26 novembre 2005
26 nov. 2005 à 21:49
Merci pour ta réponse, mais elle n'est pas assez développée pour mon problème.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
27 nov. 2005 à 11:17
Faut que tu fasses un thread.



void start_timer(void * data)

{

int time = *(int*)data;



sleep(time);

flag = 0;

}



main()

{

int flag=1;

int time = 500;

new_thread(start_timer((void*)&time)); // c'est pas la bonne fonction, mais ca sera du style.

while(flag)

{

//Faire des taches

}

}


En gros, voila le principe. A toi de savoir maintenant, quelle
librairie veux tu utiliser pour créer ton thread. Perso, j'utilise
glib, mais tu es libre d'utiliser ce que tu veux. (tu voudras surement
utiliser windows pour gérer ca)
0
huben Messages postés 13 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 27 février 2006
27 nov. 2005 à 14:02
sinon tu peu utilise la bibliotheque allegro qui comprend des timers
assez interessants, et j'entrevois la solution du probleme...
0
Rejoignez-nous