Jak w temacie - mam funkcje i zatrzymuje się ona w linijce cin>>string ,czyli pobierania jakiegoś stringa od użytkownika, chciałbym aby po 30 sekundach jeśli nie będzie reakcji użytkownika funkcja się zakończyła. Czy jest na to jakiś sposób? Czytałem trochę o funkcjach na pomiar czasu ale nie bardzo wiem jak to zastosować. Z góry dzięki za pomoc.
0
0
Jest taka funkcja w conio.h - kbhit() która sprawdza, czy klawisz został wciśnięty. Możesz zrobić pętlę z warunkiem która wykonuje się dopóki limit czasu nie upłynął, tzn.
- Sprawdzasz czy coś jest w buforze klawiatury za pomocą kbhit()
- Jeżeli tak, to dopisujesz sobie do stringa kolejną literkę którą znajdziesz pod getch(). Jeżeli ta literka była enterem, to przerywasz pętlę i masz wpisany string.
- Jeżeli nie, to doliczasz sobie do licznika czasu ile Ci upłynęło od ostatniego kbhit() i jeżeli ta wartość przekroczy 30s to przerywasz pętlę
Problem w tym, że taki sposób nie uwzględnia obsługi backspace, ale to aż takie trudne chyba nie jest.
Odpowiednie bajery od czasu znajdziesz w bibliote time.h
0
możesz utworzyć nowy wątek i w nim sprawdzać czas, albo wykorzystać timer np:
struct itimerval tout_val;
tout_val.it_interval.tv_sec = 0;
tout_val.it_interval.tv_usec = 0;
tout_val.it_value.tv_sec = 30;
tout_val.it_value.tv_usec = 0;
setitimer( ITIMER_REAL, &tout_val, 0 );
signal( SIGALRM, myTimer );
co spowoduje wygenerowanie sygnału SIGALRM po 30 sekundach, i wykonane instrukcje w funkcji
void myTimer( int sig )
{
...
}