falcon971
Messages postés5Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention26 novembre 2005
-
26 nov. 2005 à 21:18
huben
Messages postés13Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention27 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.
falcon971
Messages postés5Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention26 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.
shadow1779
Messages postés706Date d'inscriptionmercredi 17 novembre 2004StatutMembreDernière intervention29 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
.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 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)