Форум программистов, компьютерный форум CyberForum.ru

Есть ли способ закончить "cin" и продолжить программу без ввода? - C++

Восстановить пароль Регистрация
 
Komi
 Аватар для Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 00:25     Есть ли способ закончить "cin" и продолжить программу без ввода? #1
Я пишу встроеный в консоль таймер, и хочу чтобы во время ожидания (таймер работает) можно было ввести string который закончит отсчет с помощью "cin", но при этом, cin не заступорит программу ожиданием ввода, тобишь, чтобы после окончания отсчета таймера, cin помер даже если не получил никакого инпутя.

Если нет такой возможности, что посоветуете на решение?
Заранее благодарен!


p.s. x32 vc++ console application.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 00:25     Есть ли способ закончить "cin" и продолжить программу без ввода?
Посмотрите здесь:

Ошибка "error C2065: cin: необъявленный идентификатор". C++
C++ Убрать переход на новую строку после "cin"
C++ Сдающий карты. "cards_remaining--" одинаково работает и с "--", и без
C++ Заданный словарь слов. Найти в нем слова-палиндромы, то есть такие, которые одинаково читаются слева направо и наоборот, например, "АННА", "ШАЛАШ"
Что делает цикл "while(cin.getline(buf,l_buf))" ? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 00:33     Есть ли способ закончить "cin" и продолжить программу без ввода? #2
Цитата Сообщение от Komi Посмотреть сообщение
Я пишу встроеный в консоль таймер
Какими средствами пишите? Что-то уже написали?
Komi
 Аватар для Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 00:40  [ТС]     Есть ли способ закончить "cin" и продолжить программу без ввода? #3
C++
1
2
3
4
5
#include<iostream>
#include<vector>
#include<time.h>
#include<string>
#include<Windows.h>
Пока что это, Windows.h включил только для Sleep(x) и Beep(x,y). приложение все равно консольное.
написал с помощью Sleep(x) сам таймер, но проблема в том что опять таки эта функция "фризит" программу и не дает завершить отсчет преждевременно.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 01:01     Есть ли способ закончить "cin" и продолжить программу без ввода? #4
Цитата Сообщение от Komi Посмотреть сообщение
но проблема в том что опять таки эта функция "фризит" программу
WinAPI: http://www.cyberforum.ru/win-api/

Добавлено через 11 минут
Цитата Сообщение от Komi Посмотреть сообщение
vc++
Студия какая? Многопоточность поддерживает?
igorbelykh
8 / 8 / 2
Регистрация: 01.03.2013
Сообщений: 85
18.04.2014, 01:04     Есть ли способ закончить "cin" и продолжить программу без ввода? #5
Ввод в одном потоке, таймер в другом. Плюс какой-нибудь флаг, который сообщает всем, что пора бы закруглятся. Этот флаг может изменить любой поток. Вот и все.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 01:11     Есть ли способ закончить "cin" и продолжить программу без ввода? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если поддерживает многопоточность:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <windows.h>
#include <thread>
using namespace std;
 
void f()
{
    int a;
    cin >> a;
    cout << "a = " << a << endl;
}
 
 
int main()
{
    thread (f).detach();
    Sleep(5000);
    
    return 0;
}
Komi
 Аватар для Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 01:58  [ТС]     Есть ли способ закончить "cin" и продолжить программу без ввода? #7
Спасибо, не знал вообще что есть такой термин "многопоточность", пойду читать интернеты



Не, мне не это нужно, Sleep(x) я юзал как плохой вариант, замену же надо: наоборот подальше от winAPI.

Добавлено через 46 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
Код C++
А как можно через этот дред закончить сам отсчет моментально, при этом не убить программу?

я понимаю что и таймер надо в отдельный дред засунуть, но как послать ему терминацию из паралельного дреда в котором cin тусуется?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 02:06     Есть ли способ закончить "cin" и продолжить программу без ввода? #8
Цитата Сообщение от Komi Посмотреть сообщение
наоборот подальше от winAPI.
Если компилятор многопоточность не поддерживает (С++11), то только через WinAPI или сторонние библиотеки.
Komi
 Аватар для Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 02:08  [ТС]     Есть ли способ закончить "cin" и продолжить программу без ввода? #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Если компилятор многопоточность не поддерживает, то только через WinAPI или сторонние библиотеки.
Поддерживает, Visual Studio 2013.
дреды работают, уже проверил, только вот как реализовать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 03:11     Есть ли способ закончить "cin" и продолжить программу без ввода? #10
Цитата Сообщение от Komi Посмотреть сообщение
только вот как реализовать?
Что реализовывать будем?
Komi
 Аватар для Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 18:57  [ТС]     Есть ли способ закончить "cin" и продолжить программу без ввода? #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Что реализовывать будем?
ну дк, убийство оного дреда, используя другой.
как cin использовать во время таймера эт понял, но как этот таймер можно преждевременно остановить используя опять таки этот же cin?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:26     Есть ли способ закончить "cin" и продолжить программу без ввода? #12
Цитата Сообщение от Komi Посмотреть сообщение
убийство оного дреда, используя другой.
Есть хорошее русское слово: поток.
Например, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <windows.h>
#include <thread>
using namespace std;
 
volatile bool flag = true;
 
void f1()
{
    for (int i = 0; i < 100 && flag; ++i)
        Sleep(50);
}
 
void f2()
{
    int a;
    do
    {
        cin >> a; // если ввести 0, то Slepp() закончится,
                 // если не ввести 0 в течении 5 сек., то cin закончится.
        cout << "a = " << a << endl;
        flag = a;
    } while (a);
 
}
 
 
int main()
{
    thread thr1(f1);
    thread thr2(f2);
    thr2.detach();
    thr1.join();
 
    return 0;
}
Энтони Уильямс - "Параллельное программирование на С++ в действии." 2012.
Komi
 Аватар для Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
19.04.2014, 06:01  [ТС]     Есть ли способ закончить "cin" и продолжить программу без ввода? #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Код C++
зшбс все понял, спасибо!)
Цитата Сообщение от alsav22 Посмотреть сообщение
Есть хорошее русское слово: поток.
разве поток это не stream?
thread вроде "нить" на сколько гугл говорит..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 09:28     Есть ли способ закончить "cin" и продолжить программу без ввода?
Еще ссылки по теме:

C++ Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его
C++ Ошибка при компиляции In function"int main()"; expected ';', before "cin", [Build Error] [main.o] Error 1
C++ Проверка ответа пользователя на вопрос: "Продолжить программу или завершить?"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
19.04.2014, 09:28     Есть ли способ закончить "cin" и продолжить программу без ввода?
  #14

Не по теме:

Цитата Сообщение от Komi Посмотреть сообщение
thread вроде "нить" на сколько гугл говорит..
У слов бывает много значений, и не обязательно дословных (книгу почитайте).
Но точно знаю, что слов "дред" и "фризит" в русском языке нет.

Yandex
Объявления
19.04.2014, 09:28     Есть ли способ закончить "cin" и продолжить программу без ввода?
Ответ Создать тему
Опции темы

Текущее время: 21:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru