przerwanie wykonywania funkcji po określonym czasie

0

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

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.

  1. Sprawdzasz czy coś jest w buforze klawiatury za pomocą kbhit()
  2. 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.
  3. 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 )
{
...
}

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