Je cherche à lancer une alarme toutes les 5 secondes.
J'ai bien essayé un
#include
[...]
ualarm(0, 5000000);
(http://man.developpez.com/man3/ualarm.3.php)mais GCC me retourne un :
attention : implicit declaration of function ‘ualarm’
Est-ce bien la bonne fonction que je dois-utiliser ?
Ou cela vient-il d'une erreur de ma part ?
Merci !
# Erreur
Posté par Animatrix . Évalué à 1.
C'est
#include <unistd.h></code
# Fonction obsolète
Posté par Kerro . Évalué à 2.
Si tu souhaites avoir un signal toutes les 5 secondes, alarm() convient bien.
[^] # Re: Fonction obsolète
Posté par Christophe --- . Évalué à 2.
Cette fonction est obsolète, utilisez nanosleep(2) ou setitimer(2) à sa place.
...il faut toujours jeter un oeil à la section notes...
Sinon, je rajouterai aussi que dans le Synopsys, il est aussi précisé ceci:
#define _XOPEN_SOURCE 500
c'est probablement ce qui manque si tu veux *vraiment* utiliser cette fonction.
[^] # Re: Fonction obsolète
Posté par Animatrix . Évalué à 1.
Mois je veux faire une boucle infinie et je n'y arrive pas.
[^] # Re: Fonction obsolète
Posté par Émilien Tlapale . Évalué à 1.
[^] # Re: Fonction obsolète
Posté par Animatrix . Évalué à 1.
Merci bcp
# Réponse ??
Posté par Animatrix . Évalué à -1.
while(x)
{
alarm(5);
pause();
}
Le problème c'est que ca marche à peu près comme je veux, mais il a tendance a m'oublier certaines instructions...., lol
[^] # Re: Réponse ??
Posté par Kerro . Évalué à 4.
Nan parceque sinon c'est grave :-)
# Re: Alarme (boucle)
Posté par Vincent ORDY . Évalué à 3.
#include <signal.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h> // EXIT_*
#include <unistd.h> // pause()
#define ALRM_DATA 42
typedef struct sigevent sigevent_t;
typedef struct itimerspec itimerspec_t;
void sig_hdler(union sigval value)
{
if (value.sival_int == ALRM_DATA)
{
puts("Alarm received");
}
}
int main()
{
int res;
timer_t timerid;
sigevent_t evp;
const itimerspec_t timer_value =
{
{ 5, 0 },
{ 5, 0 }
};
evp.sigev_notify = SIGEV_THREAD;
evp.sigev_signo = SIGALRM;
evp.sigev_value.sival_int = ALRM_DATA;
evp.sigev_notify_function = sig_hdler;
evp.sigev_notify_attributes = NULL;
res = timer_create(CLOCK_REALTIME, &evp, &timerid);
if (res)
{
perror("timer_create() failed");
return EXIT_FAILURE;
}
timer_settime(timerid, TIMER_ABSTIME, &timer_value, NULL);
pause();
return EXIT_SUCCESS;
}
À compiler avec -lrt.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.