Oczekiwanie na wciśnięcie klawisza ograniczone czasowo

0

Jak zrobić, aby program oczekiwał na wciśnięcie klawisza przez max 30 sekund?
Chcę, aby wyglądało to mniej więcej tak:

void oczekiwanie_na_klawisz()
{
oczekiwanie na wciśnięcie klawisza przez 30

jeśli przycisk został wciśnięty - kontynuuj, jeśli nie - przerwij --> ale to wiem jak zrobić :D
}
0

kbhit() sprawdza, ci jakiś klawisz jest wciśnięty(nie czeka na niego!). I jeszcze Sleep(milisekundy)

0

Tak, ale nie wiem dlaczego po naciśnięciu przycisku cięgle mi wyświetl "Napis 2"

Oto kod:

while(time(NULL)-stamp<max_time)
     {
                system("cls");
                cout<<"Napis 2              Pozostało: "<<max_time-(time(NULL)-stamp)<<" sekund\n";
                if(time(NULL)-stamp>=max_time){break;}
                
                for(int wait=0; wait<=100; wait++)
                {
                        if(kbhit()!=false)
                        {
                                          while(time(NULL)-stamp<max_time)
                                          { 
                                                                          system("cls");
                                                                          cout<<"Napis 1          Pozostało: "<<max_time-(time(NULL)-stamp)<<" sekund\n";
                                                                          _sleep(75);
                                                                          w=w+1;
                                                                          break;
                                          }
                                         
                        }
                        else
                        {
                            _sleep(10);  
                        }
                }
                
     } 
0

Ja napisałem sobie takie funkcje do czekania i przerwania czekania gdy zostanie wciśnięty klawisz może Ci pomogą:

#include "windows.h"

double GetTime()
{
          long long f, t;
          QueryPerformanceFrequency((PLARGE_INTEGER) &f);
          QueryPerformanceCounter((PLARGE_INTEGER) &t);
          return (double)t / (double)f;
}

void waitms( double count )
{
 double end = GetTime() + count / 100;
 while( GetTime() < end && !kbhit() ) { }
}
 

ps:
dzięki wykorzystaniu QueryPerformanceFrequency i QueryPerformanceCounter można otrzymać o wiele większą dokładność ale to tak już btw.

1 użytkowników online, w tym zalogowanych: 0, gości: 1