Comment faire un message clignotant sous C
Fermé
mimi.gsm
Messages postés
45
Date d'inscription
dimanche 22 février 2009
Statut
Membre
Dernière intervention
15 novembre 2010
-
2 mars 2009 à 23:16
mamiemando Messages postés 33268 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 septembre 2024 - 3 mars 2009 à 20:50
mamiemando Messages postés 33268 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 septembre 2024 - 3 mars 2009 à 20:50
A voir également:
- Comment faire un message clignotant sous C
- Message - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Message d'absence thunderbird - Guide
- Diff message ✓ - Forum Mobile
- Ce compte ne peut pas recevoir vos messages car il n’autorise aucune invitation par message ✓ - Forum Facebook
3 réponses
mamiemando
Messages postés
33268
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
18 septembre 2024
7 780
3 mars 2009 à 00:22
3 mars 2009 à 00:22
Les threads
Tu peux commencer par lire ceci :
https://fr.wikipedia.org/wiki/Processus_l%C3%A9ger
De manière intuitive un programme mono thread suit un seul fil d'exécution. Quand tu utilises des threads, tu as plusieurs fils d'exécutions qui s'exécutent simultanément. C'est typiquement ce qui est utilisé pour ne pas geler une interface pendant qu'une application fait un calcul (un thread pour l'interface graphique, un thread pour l'interface).
On peut multiplier le nombre de thread si un calcul peut être parallélisé : plusieurs processus (chaque thread) fait alors une partie du calcul. Il faut bien sûr que l'application soit prévue pour. Notamment il faut parfois faire des sections critiques, c'est-à-dire des sections de code où seul un thread peut passer simultanément (voir sémaphores et autres). Notamment c'est utile pour éviter que deux processus manipulent simultanément la même donnée.
http://fr.wikipedia.org/wiki/S%C3%A9maphore_(informatique)
Tu peux aussi regarder du côté de l'instruction fork en C pour créer plusieurs processus.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/fork.2.html
Dans ton cas, il faudrait un thread pour le clignotement (l'interface), et une autre pour le calcul (j'attends que l'utilisateur saisisse son index par rapport à mon menu) si tu veux vraiment t'y prendre comme ça. Mais ce n'est pas la bonne approche dans ce cas très particulier !
Les séquences d'échappements
Une séquence d'échappement est une suite de caractère qui au lieu d'être écrite telle qu'elle est interprétée. Par exemple la séquence '\n' désigne dans la plupart des langages un retour à la ligne.
De la même façon, le style "clignotant" peut être obtenu en passant une séquence d'échappement bien trouvée, qui dépend fortement du shell que tu utilises. Si tu ne sais pas ce qu'est un shell lis ça :
http://fr.wikipedia.org/wiki/Shell_(informatique)
Par exemple si tu utilises une console bash ( voir https://en.wikipedia.org/wiki/Bash ) ou un terminal cygwin sous windows (voir https://fr.wikipedia.org/wiki/Cygwin ), il suffit de se référer à ce lien pour construire la séquence d'échappement adéquate :
http://jamiedubs.com/ps1-collection-customize-your-bash-prompt
Note qu'il existe plein de shells, par exemple sous linux il y a bash, tcsh, sh, ksh, zsh... Sous linux la plupart des gens utilisent bash. Cygwin utilise également bash.
L'instruction suivante (en bash) :
... écrit pouet en rouge clignotant sous linux (tu noteras que c'était parfaitement évident, la syntaxe parle d'elle même enfin !). L'instruction "echo -e" permet d'écrire le texte qui suit en évaluant ses éventuelles séquences d'échappement conformément au shell utilisé. Si tu installes linux ou cygwin et que tu tapes cette commande tu verras donc apparaître un pouet rouge clignotant apparaître.
Bon c'est très bien tout ça, mais les séquences d'échappement dépendent du shell et ce n'est pas forcément super intuitif. Heureusement, il y a la libraire ncurses qui permet de s'en affranchir :
https://fr.wikipedia.org/wiki/Ncurses
Conclusion : pas besoin de thread a priori, il faut juste trouver la séquence d'échappement qui va bien ou utiliser ncurses.
Bonne chance
Tu peux commencer par lire ceci :
https://fr.wikipedia.org/wiki/Processus_l%C3%A9ger
De manière intuitive un programme mono thread suit un seul fil d'exécution. Quand tu utilises des threads, tu as plusieurs fils d'exécutions qui s'exécutent simultanément. C'est typiquement ce qui est utilisé pour ne pas geler une interface pendant qu'une application fait un calcul (un thread pour l'interface graphique, un thread pour l'interface).
On peut multiplier le nombre de thread si un calcul peut être parallélisé : plusieurs processus (chaque thread) fait alors une partie du calcul. Il faut bien sûr que l'application soit prévue pour. Notamment il faut parfois faire des sections critiques, c'est-à-dire des sections de code où seul un thread peut passer simultanément (voir sémaphores et autres). Notamment c'est utile pour éviter que deux processus manipulent simultanément la même donnée.
http://fr.wikipedia.org/wiki/S%C3%A9maphore_(informatique)
Tu peux aussi regarder du côté de l'instruction fork en C pour créer plusieurs processus.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/fork.2.html
Dans ton cas, il faudrait un thread pour le clignotement (l'interface), et une autre pour le calcul (j'attends que l'utilisateur saisisse son index par rapport à mon menu) si tu veux vraiment t'y prendre comme ça. Mais ce n'est pas la bonne approche dans ce cas très particulier !
Les séquences d'échappements
Une séquence d'échappement est une suite de caractère qui au lieu d'être écrite telle qu'elle est interprétée. Par exemple la séquence '\n' désigne dans la plupart des langages un retour à la ligne.
De la même façon, le style "clignotant" peut être obtenu en passant une séquence d'échappement bien trouvée, qui dépend fortement du shell que tu utilises. Si tu ne sais pas ce qu'est un shell lis ça :
http://fr.wikipedia.org/wiki/Shell_(informatique)
Par exemple si tu utilises une console bash ( voir https://en.wikipedia.org/wiki/Bash ) ou un terminal cygwin sous windows (voir https://fr.wikipedia.org/wiki/Cygwin ), il suffit de se référer à ce lien pour construire la séquence d'échappement adéquate :
http://jamiedubs.com/ps1-collection-customize-your-bash-prompt
Note qu'il existe plein de shells, par exemple sous linux il y a bash, tcsh, sh, ksh, zsh... Sous linux la plupart des gens utilisent bash. Cygwin utilise également bash.
L'instruction suivante (en bash) :
echo -e '\e[05;31mpouet\e[00m'
... écrit pouet en rouge clignotant sous linux (tu noteras que c'était parfaitement évident, la syntaxe parle d'elle même enfin !). L'instruction "echo -e" permet d'écrire le texte qui suit en évaluant ses éventuelles séquences d'échappement conformément au shell utilisé. Si tu installes linux ou cygwin et que tu tapes cette commande tu verras donc apparaître un pouet rouge clignotant apparaître.
Bon c'est très bien tout ça, mais les séquences d'échappement dépendent du shell et ce n'est pas forcément super intuitif. Heureusement, il y a la libraire ncurses qui permet de s'en affranchir :
https://fr.wikipedia.org/wiki/Ncurses
Conclusion : pas besoin de thread a priori, il faut juste trouver la séquence d'échappement qui va bien ou utiliser ncurses.
Bonne chance
mimi.gsm
Messages postés
45
Date d'inscription
dimanche 22 février 2009
Statut
Membre
Dernière intervention
15 novembre 2010
1
3 mars 2009 à 19:16
3 mars 2009 à 19:16
beh merci pour votre reponse mais est ce que c possible de faire ces séquences d'echapement sous windows avec l'interface graphique et puis j'aime garder le programme que g fait. a propos g entendu parlé de fonctions de saisie non blanquantes car c evident que le "scanf" est bloquant , donc voilà ya t'il une autre fonction de saisie non bloquante??? et c toujours sous windows(turbo c 3.0) et pas sous linux . merci
mamiemando
Messages postés
33268
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
18 septembre 2024
7 780
3 mars 2009 à 20:50
3 mars 2009 à 20:50
Désolée mais je connais trop peu windows pour te dire, je peux juste te dire que les séquences d'échappement que je t'ai indiqué marchent sous cygwin (en fait tout ce que je t'ai indiqué sous linux marche dans un environnement cygwin sous windows, il faudrait juste vérifier comment se comporte le terminal de base windows).
Si tu veux un scanf non bloquant il faudra faire un thread ou une interface graphique (qui reposera sur un thread).
Bonne chance
Si tu veux un scanf non bloquant il faudra faire un thread ou une interface graphique (qui reposera sur un thread).
Bonne chance