Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 11:22   #1
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию Выполнение участка кода без ожидания ввода

Всем привет. Вот, что меня интересует:
Допустим, есть такой код:
Код:
#include <iostream>

int main()
{
    int a
    //Первая часть кода
    std::cin >> a;
    //Вторая часть кода
}
Можно ли в таком коде сделать так, чтобы если пользователь определённое время не вводит a, то чтобы компьютер не дожидался ввода a и переходил к выполнению следующего участка кода.
Заранее всем спасибо.
БалаШагаЛ вне форума Ответить с цитированием
Старый 08.06.2011, 12:14   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Вариант 1 (простой). Сделать цикл, выход из которого либо по прошествии интервала времени (проверка по time() или GetSystemTime(), смотря какая точность нужна), либо при нажатии клавиши (проверка по kbhit()).

Вариант 2 (продвинутый). Создать второй поток, ожидающий ввод. Если ввода нет, поток принудительно завершается, и программа работает дальше.
ds.Dante вне форума Ответить с цитированием
Старый 08.06.2011, 12:19   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

вариант 3 (правильный). Использовать мультиплексирование дескрипторов. в никсах select/poll, в виндах же они работают только с сокетами, тут не знаю
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 08.06.2011, 12:28   #4
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

По поводу варианта 1.
Если я правильно понял, что написано, то вот, к примеру, код:
Код:
#include <iostream>
#include <time.h>

int main()
{
    int a;
    int time1;
    do
    {
        std::cin >> a;
        if (time1==time(NULL)-1)
          break;
    }while(0);
    //Остальной код
}
Но в таком случае оно всё равно ожидает ввода и не переходит к новому действию.
Не могли бы вы код показать, как это сделать?
БалаШагаЛ вне форума Ответить с цитированием
Старый 08.06.2011, 13:17   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Одной строчки не хватает.

Код:
if (kbhit())
	std::cin >> a;
Функция kbhit() не ждёт пользователя, а просто проверяет, не хочет ли он что-нибудь куда-нибудь ввести.
ds.Dante вне форума Ответить с цитированием
Старый 09.06.2011, 12:17   #6
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Ясно. Спасибо за помощь.
БалаШагаЛ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить количество символов участка кода на интернет странице Shinnok91 Общие вопросы Delphi 20 23.03.2011 09:06
Реализация ожидания без подвисания программы. (Delphi 7) Chaosito Помощь студентам 3 07.02.2011 07:42
Вызов события из произвольного участка кода в WPF Casper-SC Общие вопросы .NET 1 24.07.2010 10:23
DepositFiles и Letitbit - теперь с них можно качать без ожидания goblinyara Свободное общение 10 13.01.2009 02:22