Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wprowadzanie danych w konsoli na czas

Ostatnio zmodyfikowano 2018-07-16 20:38
Autor Wiadomość
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?
P-171872
pekfos
» 2018-07-16 18:31:46
P-171873
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.
P-171874
abc
Temat założony przez niniejszego użytkownika
» 2018-07-16 18:43:28
Tamten kod nie zbyt rozumiem.
P-171875
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():
C/C++
#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.
P-171876
abc
Temat założony przez niniejszego użytkownika
» 2018-07-16 20:36:40
Niby działa, ale trochę spieszy.
P-171877
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.
P-171878
« 1 »
  Strona 1 z 1