Wprowadzanie danych w konsoli na czas
Ostatnio zmodyfikowano 2018-07-16 20:38
abc Temat założony przez niniejszego użytkownika |
Wprowadzanie danych w konsoli na czas » 2018-07-16 18:20:26 Chciałbym zrobić program (konsola), w którym użytkownik ma np. 2 sekundy na wpisanie czegoś, a potem, niezależnie czy zdążył, program rusza dalej. Da się tak? |
|
pekfos |
» 2018-07-16 18:31:46 |
|
abc Temat założony przez niniejszego użytkownika |
» 2018-07-16 18:42:45 Chodzi o to, że funkcje cin czy getch() czekają do wciśnięcia, a chcę czekać tylko 2 sekundy. |
|
abc Temat założony przez niniejszego użytkownika |
» 2018-07-16 18:43:28 Tamten kod nie zbyt rozumiem. |
|
pekfos |
» 2018-07-16 19:05:18 Jak chcesz kodu, który zrozumiesz, to masz tam podane rozwiązanie dla getch() z użyciem funkcji kbhit(). Dla wczytywania liczby przez cin można skorzystać z innej podanej tam sugestii o funkcji CancelIoEx(): #define _WIN32_WINNT 0x0600 #include <windows.h> #include <iostream> #include <thread> #include <chrono> #include <mutex> #include <condition_variable>
int main() { std::condition_variable cv; bool timeout = false; std::thread thr([ & cv, & timeout ] { std::mutex mtx; std::unique_lock < std::mutex > lock( mtx ); if( cv.wait_for( lock, std::chrono::seconds( 2 ) ) == std::cv_status::timeout ) { CancelIoEx( GetStdHandle( STD_INPUT_HANDLE ), nullptr ); timeout = true; } } ); int i = 0; std::cin >> i; cv.notify_one(); thr.join(); if( timeout ) std::cout << "Za pozno\n"; else std::cout << i << '\n'; } Wymagany Windows Vista lub nowszy, C++11 lub nowszy, etc. |
|
abc Temat założony przez niniejszego użytkownika |
» 2018-07-16 20:36:40 Niby działa, ale trochę spieszy. |
|
abc Temat założony przez niniejszego użytkownika |
» 2018-07-16 20:38:35 #include <conio.h> #include <time.h> #include <windows.h> #include <iostream> using namespace std; int main() { int i, count=0; clock_t start, check; double tajm; //GetTickCount(); start=clock(); while(!kbhit()) { cout<<"Please enter the input:"<<endl; while(tajm<2) { check=clock(); tajm=(double)(check-start)/CLOCKS_PER_SEC; if (kbhit()) { i=getch(); cout<<"Data accepted"<<endl; return 0; } } count++; cout<<"Time-out: 2 seconds time "<<count<<endl; cout<<"Timer again set to 0"<<endl; start=clock(); tajm=0; } return 0; } II jakby spieszy. |
|
« 1 » |