comment lancer une procédure quand 30 s d'inactivité sont écoulées?

comment lancer une procédure quand 30 s d'inactivité sont écoulées? - C++ - Programmation

Marsh Posté le 08-01-2005 à 07:18:16    

comment gérer une réaction au clavier par rapport a un timer de 30s ??
 
salut à tous !
 
J'aimerais en fait trouver un moyen de jouer avec le temps en c++  
je n'ai jamais su comment je pouvais faire .
 
pourriez vous m'aider??
 
en gros j'ai     besoin de faire un encodage au clavier  
mais ......si je touche a rien pendant un certain temps ( 30 secondes )
 
faudrait qu'il passe a autre chose !!
que l'encodage ne soit plus faisable ! qu'un autre bout de code soit effectué.
 
 
merci d'avance pour vos idées


Message édité par fullnight le 10-01-2005 à 20:18:58
Reply

Marsh Posté le 08-01-2005 à 07:18:16   

Reply

Marsh Posté le 08-01-2005 à 12:20:58    

tas cherché du coté de timeout ?

Reply

Marsh Posté le 08-01-2005 à 18:24:45    

non ca marche comment?

Reply

Marsh Posté le 08-01-2005 à 18:57:47    

Voir les signaux sous UNIX (SIGALRM) et les timers sous Windows (SetTimer).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-01-2005 à 19:12:13    

houlala du calme !
pas de unix !moi je suis sous windows avec VC++ 6.0 ..
 
j'ai juste un cin a faire.... pour une variable codeSecret
mais je veux qu'après 30 sec  y'ai plus possibilité de faire le cin.
 
en fait je dois entrer un "code secret" et si je ne rentre rien avant 30 secondes le prog me fait un autre bout de code.
 
 
ou est ce que je peux obtenir des infos claires et détaillées avec exemple en french la dessus ?
 
pis ce serait cool un cout << "il vous reste "<< i << "secondes " << endl;
 
30 fois.


Message édité par fullnight le 09-01-2005 à 21:35:14
Reply

Marsh Posté le 08-01-2005 à 22:12:57    

Tu peux faire des _getch toutes les 100 ms pour détecter l'appui d'une touche. Au bout de 30 secondes tu arrêtes de tester. En + ça t'affichera pas le caractère tapé et c'est généralement ce qu'on souhaite pour saisir un mot de passe (faire un cout de '*' à la palce). Utilise Sleep(100) pour faire une tempo de 100ms.
http://msdn.microsoft.com/library/ [...] getche.asp
http://msdn.microsoft.com/library/ [...] /sleep.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 09-01-2005 à 00:36:56    

heu c'est 1000 ms pour une seconde et pas 100 comme tu l'as mis.
 
et je ne vois pas ...ce que donnerait le code car sleep endort tout le programme....
je fais n'importe quoi je ne sais pas du tout comment faire cette tempo dont tu me parles?
 
'au bout de 30 secondes'     ca veut dire quoi en algorithmique?  
 
 
int code ;
 
do
{  
   
   
 
   if ( code  =  _getch() )  
   {
    cout <<"*";
   }
 
}while  ( sleep == 30000 )  ;
 
 
 
je crois a fond que c mauvais


Message édité par fullnight le 09-01-2005 à 00:39:08
Reply

Marsh Posté le 09-01-2005 à 20:58:50    

Je sais pas si ça va t'aider mais bon !
L'opération que tu veux effectuer est appelé syncronisation de multiplexage d'entrée/sortie (très pompeux :pt1cable: )
Et sous linux la fonction a utilisé est select () en incluant (sys/select.h).
Maintenant tu peux chercher l'équivalent windows.
voila la page d'aide de la fonction linux :
http://unixhelp.ed.ac.uk/CGI/man-cgi?select+2
Bon courage !
J'y connais rien à la prog windows mais ça à l'air de ressembler à ma fonction linux.
http://msdn.microsoft.com/library/ [...] jectex.asp
en gros la fonction windows attend un objet (une saisie clavier par exemple) et si le delai que tu lui à mis en paramètre est écoulé elle arrête d'attendre l'objet.


Message édité par mocosraito le 09-01-2005 à 21:17:45
Reply

Marsh Posté le 09-01-2005 à 21:34:09    

je programme en mode console
pas en mode windows
 
je voulais juste dire que j'étais pas sur linux mais sous windows !
 
donc je suis pas avancé :(

Reply

Marsh Posté le 09-01-2005 à 22:24:20    

Il me semble que WaitForSingleObject ne fonctionne pas avec les flux console. Je pense qu'il faut plutot utiliser GetNumberOfConsoleInputEvents & PeekConsoleInput.
 
J'ai bien dit 100, pour 0.1 seconde, afin d'être assez réactif, car si ca met une seconde à afficher ce que tu tapes ca peut etre lent. Attendre 30 sec, c'est simplement attendre 300 fois 100 ms.

Code :
  1. int count = 0;
  2. while ( count < 300 ) // 30 sec
  3. {
  4.     Sleep( 100 ); // 100 ms
  5.     if ( _kbhit() ) { break; } // touche enfoncée
  6.     ++count;
  7. }
  8. if ( count < 300 )
  9. {
  10.     // touche enfoncee
  11.     int c = _getch();
  12.     cout << '*';
  13. }
  14. else
  15. {
  16.     // timeout
  17. }


Un truc de ce genre. Note que je me suis trompé, c'est _kbhit qu'il faut utiliser pout tester une frappe au clavier. Note aussi que ce n'est pas portable.


Message édité par HelloWorld le 09-01-2005 à 22:25:31

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 09-01-2005 à 22:24:20   

Reply

Marsh Posté le 10-01-2005 à 01:09:57    

en fait tu écris int c = _getch();
                  cout << "*";
 
ca provoque 4 *    si je tape 4 x un chiffre ? ou si je tape 4 fois n'importe quoi?
 
ensuite
_kbhit() il sort de quelle include ? stp

Reply

Marsh Posté le 10-01-2005 à 01:35:15    

Le plus tu poses de questions, le moins tu y réponds... (Cantona à Papin, in "Les Guignols de l'Info, 1993).
 
#include <windows.h>
#include <wincon.h>

Reply

Marsh Posté le 10-01-2005 à 02:47:33    

c'est conio.h
 

Reply

Marsh Posté le 10-01-2005 à 09:29:46    

http://msdn.microsoft.com/library/ [...] _kbhit.asp
http://msdn.microsoft.com/library/ [...] getche.asp
Avec _getch il te faut aussi tester si ce n'est pas un caractère étendu (genre une flèche, touche ALT, ...) que tu reçois ce qui nécessite d'appeler une 2° fois. Tu récupères tout, chiffre, lettre, car spécial... à toi de filtrer.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 10-01-2005 à 20:19:44    

ouais bon j'ai plus le temps de jouer a cacher le code secret  
 
je dois faire mon rapport de projet :(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed