comment attendre dans une boucle en C sous linux ?
6 réponses
Eric Bart
Bonjour,
J'aurais aimé pouvoir attendre un évènement dans une boucle.
Le pourcentage d'utilisation du CPU grimpe en flèche. Est-ce
d'attendre en testant la valeur d'une variable sans monopoliser
le CPU ?
J'ai essayé nanosleep sans succès et je ne connais pas les signaux...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Nicolas George
"Eric Bart" wrote in message <417810d1$0$279$:
J'aurais aimé pouvoir attendre un évènement dans une boucle. Le pourcentage d'utilisation du CPU grimpe en flèche. Est-ce d'attendre en testant la valeur d'une variable sans monopoliser le CPU ?
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ? Action d'un autre thread ?
"Eric Bart" wrote in message <417810d1$0$279$626a14ce@news.free.fr>:
J'aurais aimé pouvoir attendre un évènement dans une boucle.
Le pourcentage d'utilisation du CPU grimpe en flèche. Est-ce
d'attendre en testant la valeur d'une variable sans monopoliser
le CPU ?
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ?
Action d'un autre thread ?
J'aurais aimé pouvoir attendre un évènement dans une boucle. Le pourcentage d'utilisation du CPU grimpe en flèche. Est-ce d'attendre en testant la valeur d'une variable sans monopoliser le CPU ?
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ? Action d'un autre thread ?
Gilles Berger Sabbatel
On Thu, 21 Oct 2004 21:40:42 +0200, Eric Bart wrote:
Bonjour,
J'aurais aimé pouvoir attendre un évènement dans une boucle. Le pourcentage d'utilisation du CPU grimpe en flèche. Est-ce d'attendre en testant la valeur d'une variable sans monopoliser le CPU ?
Attendre en testant la valeur d'une variable, cela s'appelle de l'attente active, et cela fait forcément 100% d'utilisation du CPU...
2 solutions :
- être prévenu du changement de la valeur par un signal, et attendre par select(2), poll(2), ou simplement pause(2).
- introduire une temporisation entre chaque test (ce que vous avez essayé de faire avec nanosleep), sachant que l'unité de temps est en général la milliseconde sur les noyaux récents. L'inconvénient est qu'une temporisation trop longue peut pénaliser votre appli, et si elle est trop courte, ce sont les perfs de votre machine qui sont pénalisées. En fait, ce genre de solution est rarement très élégante...
J'ai essayé nanosleep sans succès et je ne connais pas les signaux...
Voir aussi sleep et usleep, plus faciles à utiliser. Mais il vous faudra bien apprendre à utiliser les signaux, et on ne peut quand même pas vous donner des cours de programmation par Usenet! RTFM, donc...
On Thu, 21 Oct 2004 21:40:42 +0200, Eric Bart wrote:
Bonjour,
J'aurais aimé pouvoir attendre un évènement dans une boucle. Le
pourcentage d'utilisation du CPU grimpe en flèche. Est-ce d'attendre en
testant la valeur d'une variable sans monopoliser le CPU ?
Attendre en testant la valeur d'une variable, cela s'appelle de l'attente
active, et cela fait forcément 100% d'utilisation du CPU...
2 solutions :
- être prévenu du changement de la valeur par un signal, et attendre par
select(2), poll(2), ou simplement pause(2).
- introduire une temporisation entre chaque test (ce que vous avez essayé
de faire avec nanosleep), sachant que l'unité de temps est en général
la milliseconde sur les noyaux récents. L'inconvénient est qu'une
temporisation trop longue peut pénaliser votre appli, et si elle est
trop courte, ce sont les perfs de votre machine qui sont pénalisées.
En fait, ce genre de solution est rarement très élégante...
J'ai essayé nanosleep sans succès et je ne connais pas les signaux...
Voir aussi sleep et usleep, plus faciles à utiliser. Mais il vous faudra
bien apprendre à utiliser les signaux, et on ne peut quand même pas vous
donner des cours de programmation par Usenet! RTFM, donc...
On Thu, 21 Oct 2004 21:40:42 +0200, Eric Bart wrote:
Bonjour,
J'aurais aimé pouvoir attendre un évènement dans une boucle. Le pourcentage d'utilisation du CPU grimpe en flèche. Est-ce d'attendre en testant la valeur d'une variable sans monopoliser le CPU ?
Attendre en testant la valeur d'une variable, cela s'appelle de l'attente active, et cela fait forcément 100% d'utilisation du CPU...
2 solutions :
- être prévenu du changement de la valeur par un signal, et attendre par select(2), poll(2), ou simplement pause(2).
- introduire une temporisation entre chaque test (ce que vous avez essayé de faire avec nanosleep), sachant que l'unité de temps est en général la milliseconde sur les noyaux récents. L'inconvénient est qu'une temporisation trop longue peut pénaliser votre appli, et si elle est trop courte, ce sont les perfs de votre machine qui sont pénalisées. En fait, ce genre de solution est rarement très élégante...
J'ai essayé nanosleep sans succès et je ne connais pas les signaux...
Voir aussi sleep et usleep, plus faciles à utiliser. Mais il vous faudra bien apprendre à utiliser les signaux, et on ne peut quand même pas vous donner des cours de programmation par Usenet! RTFM, donc...
Eric Bart
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ? Action d'un autre thread ?
C'est une autre thread qui remplit une variable partagée.
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ? Action d'un autre thread ?
C'est une autre thread qui remplit une variable partagée.
Ah, ben alors il ne te reste plus qu'à 'man pthread_cond_wait' et 'man pthread_cond_signal'. C'est pile poil ce qu'il te faut.
usleep résout mon problème. Est-ce la bonne méthode ?
Bah non. ;)
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'ai reçu un mail parlant d'un petit garçon malade. Je l'ai transféré à tous ceux que je connaissais. On me dit que c'est un attrape couillons. Est-ce vrai? Suis-je vraiment aussi con que le prétend ma femme? -+-C in GNU - Le plus dur dans le mariage, c'est d'en sortir vivant -+-
On Fri, 22 Oct 2004, Eric Bart wrote:
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ?
Action d'un autre thread ?
C'est une autre thread qui remplit une variable partagée.
Ah, ben alors il ne te reste plus qu'à 'man pthread_cond_wait' et 'man
pthread_cond_signal'. C'est pile poil ce qu'il te faut.
usleep résout mon problème. Est-ce la bonne méthode ?
Bah non. ;)
--
Erwann ABALEA <erwann@abalea.com> - RSA PGP Key ID: 0x2D0EABD5
-----
J'ai reçu un mail parlant d'un petit garçon malade. Je l'ai transféré à
tous ceux que je connaissais. On me dit que c'est un attrape couillons.
Est-ce vrai? Suis-je vraiment aussi con que le prétend ma femme?
-+-C in GNU - Le plus dur dans le mariage, c'est d'en sortir vivant -+-
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ? Action d'un autre thread ?
C'est une autre thread qui remplit une variable partagée.
Ah, ben alors il ne te reste plus qu'à 'man pthread_cond_wait' et 'man pthread_cond_signal'. C'est pile poil ce qu'il te faut.
usleep résout mon problème. Est-ce la bonne méthode ?
Bah non. ;)
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'ai reçu un mail parlant d'un petit garçon malade. Je l'ai transféré à tous ceux que je connaissais. On me dit que c'est un attrape couillons. Est-ce vrai? Suis-je vraiment aussi con que le prétend ma femme? -+-C in GNU - Le plus dur dans le mariage, c'est d'en sortir vivant -+-
Eric Bart
merci à tous
"Erwann ABALEA" wrote in message news:
On Fri, 22 Oct 2004, Eric Bart wrote:
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ? Action d'un autre thread ?
C'est une autre thread qui remplit une variable partagée.
Ah, ben alors il ne te reste plus qu'à 'man pthread_cond_wait' et 'man pthread_cond_signal'. C'est pile poil ce qu'il te faut.
usleep résout mon problème. Est-ce la bonne méthode ?
Bah non. ;)
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'ai reçu un mail parlant d'un petit garçon malade. Je l'ai transféré à tous ceux que je connaissais. On me dit que c'est un attrape couillons. Est-ce vrai? Suis-je vraiment aussi con que le prétend ma femme? -+-C in GNU - Le plus dur dans le mariage, c'est d'en sortir vivant -+-
merci à tous
"Erwann ABALEA" <erwann@abalea.com> wrote in message news:Pine.LNX.4.58.0410221209570.8366@shining.seclogd.org...
On Fri, 22 Oct 2004, Eric Bart wrote:
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ?
Action d'un autre thread ?
C'est une autre thread qui remplit une variable partagée.
Ah, ben alors il ne te reste plus qu'à 'man pthread_cond_wait' et 'man
pthread_cond_signal'. C'est pile poil ce qu'il te faut.
usleep résout mon problème. Est-ce la bonne méthode ?
Bah non. ;)
--
Erwann ABALEA <erwann@abalea.com> - RSA PGP Key ID: 0x2D0EABD5
-----
J'ai reçu un mail parlant d'un petit garçon malade. Je l'ai transféré à
tous ceux que je connaissais. On me dit que c'est un attrape couillons.
Est-ce vrai? Suis-je vraiment aussi con que le prétend ma femme?
-+-C in GNU - Le plus dur dans le mariage, c'est d'en sortir vivant -+-
De quel genre d'événement s'agit-il ? Disponibilité de données sur un fd ? Action d'un autre thread ?
C'est une autre thread qui remplit une variable partagée.
Ah, ben alors il ne te reste plus qu'à 'man pthread_cond_wait' et 'man pthread_cond_signal'. C'est pile poil ce qu'il te faut.
usleep résout mon problème. Est-ce la bonne méthode ?
Bah non. ;)
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'ai reçu un mail parlant d'un petit garçon malade. Je l'ai transféré à tous ceux que je connaissais. On me dit que c'est un attrape couillons. Est-ce vrai? Suis-je vraiment aussi con que le prétend ma femme? -+-C in GNU - Le plus dur dans le mariage, c'est d'en sortir vivant -+-