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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
#1

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

18.04.2014, 00:25. Просмотров 668. Ответов 13
Метки нет (Все метки)

Я пишу встроеный в консоль таймер, и хочу чтобы во время ожидания (таймер работает) можно было ввести string который закончит отсчет с помощью "cin", но при этом, cin не заступорит программу ожиданием ввода, тобишь, чтобы после окончания отсчета таймера, cin помер даже если не получил никакого инпутя.

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


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

Динамический массив объектов(изменить реализацию ввода элементов, через "cin". Для передачи в public) - C++
Вот прога: #include<iostream> using namespace std; class samp { int i,j; public: void set_ij(int a, int b) {i=a, j=b;} ...

Проверка ответа пользователя на вопрос: "Продолжить программу или завершить?" - C++
Программа запросит следующие: Продолжить программу или завершить? Нужно нажать y для "да" или n для "нет". Подскажите, как реализовать...

"cin","cout" на "printf","scanf" - C++
Вот ещё прога. Мне чисто нужно переделать её на printf,scanf и не используя функцию show, а puts и gets. #include <iostream> using...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его - C++
Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его или получить строку в слова "да" и...

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" - C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 00:33 #2
Цитата Сообщение от Komi Посмотреть сообщение
Я пишу встроеный в консоль таймер
Какими средствами пишите? Что-то уже написали?
0
Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 00:40  [ТС] #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) сам таймер, но проблема в том что опять таки эта функция "фризит" программу и не дает завершить отсчет преждевременно.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 01:01 #4
Цитата Сообщение от Komi Посмотреть сообщение
но проблема в том что опять таки эта функция "фризит" программу
WinAPI: http://www.cyberforum.ru/win-api/

Добавлено через 11 минут
Цитата Сообщение от Komi Посмотреть сообщение
vc++
Студия какая? Многопоточность поддерживает?
1
igorbelykh
8 / 8 / 2
Регистрация: 01.03.2013
Сообщений: 85
18.04.2014, 01:04 #5
Ввод в одном потоке, таймер в другом. Плюс какой-нибудь флаг, который сообщает всем, что пора бы закруглятся. Этот флаг может изменить любой поток. Вот и все.
1
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 01:11 #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;
}
1
Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 01:58  [ТС] #7
Спасибо, не знал вообще что есть такой термин "многопоточность", пойду читать интернеты



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

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

я понимаю что и таймер надо в отдельный дред засунуть, но как послать ему терминацию из паралельного дреда в котором cin тусуется?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 02:06 #8
Цитата Сообщение от Komi Посмотреть сообщение
наоборот подальше от winAPI.
Если компилятор многопоточность не поддерживает (С++11), то только через WinAPI или сторонние библиотеки.
0
Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 02:08  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Если компилятор многопоточность не поддерживает, то только через WinAPI или сторонние библиотеки.
Поддерживает, Visual Studio 2013.
дреды работают, уже проверил, только вот как реализовать?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 03:11 #10
Цитата Сообщение от Komi Посмотреть сообщение
только вот как реализовать?
Что реализовывать будем?
0
Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 18:57  [ТС] #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Что реализовывать будем?
ну дк, убийство оного дреда, используя другой.
как cin использовать во время таймера эт понял, но как этот таймер можно преждевременно остановить используя опять таки этот же cin?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:26 #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.
1
Komi
6 / 6 / 2
Регистрация: 10.08.2012
Сообщений: 82
19.04.2014, 06:01  [ТС] #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Код C++
зшбс все понял, спасибо!)
Цитата Сообщение от alsav22 Посмотреть сообщение
Есть хорошее русское слово: поток.
разве поток это не stream?
thread вроде "нить" на сколько гугл говорит..
0
alsav22
19.04.2014, 09:28     Есть ли способ закончить "cin" и продолжить программу без ввода?
  #14

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 09:28
Привет! Вот еще темы с ответами:

Написать программу которaя запрашиваeт у пользователя номер дня недели, затем выводит одно из сообщений "рабочий день", "суббота", "воскресенье" - C++
Добрый день необходимо написать несколько программ, кто может помогите. одна тема - одна задача!

"Неожиданный" пропуск ввода при заполнении пользователем полей в массиве объектов типа "Student" - C++
Здравствуйте. Решил создать небольшой класс &quot;Студент&quot; с массивом объектов. При первом прохождении цикла (для object) все работает хорошо,...

Классы "Студент" ,"Группа" - не работает метод ввода и вывода - C++
Тема: Классы языка С ++: группа и студент Задание 1. Создайте класс «Группа». - Данные класса - номер группы, специальность,...

Объясните разницу между "cin.getline" и "std::getline" - C++
string a; cin.getline(a); getline(cin, a);в чем разница между &quot;cin.getline(a);&quot; и &quot;getline(cin, a);&quot;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.04.2014, 09:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru