Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Komi
6 / 6 / 5
Регистрация: 10.08.2012
Сообщений: 82
1

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

18.04.2014, 00:25. Просмотров 751. Ответов 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". Для передачи в public)
Вот прога: #include<iostream> using namespace std; class samp { int i,j;...

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

"cin","cout" на "printf","scanf"
Вот ещё прога. Мне чисто нужно переделать её на printf,scanf и не используя...

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

Идентификатор "cin" и "cout" не определены
Народ, спасайте в этом месте выдаёт ошибку пишет, что идентификатор "cin" и...

13
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 00:33 2
Цитата Сообщение от Komi Посмотреть сообщение
Я пишу встроеный в консоль таймер
Какими средствами пишите? Что-то уже написали?
0
Komi
6 / 6 / 5
Регистрация: 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
5442 / 4837 / 831
Регистрация: 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 / 3
Регистрация: 01.03.2013
Сообщений: 85
18.04.2014, 01:04 5
Ввод в одном потоке, таймер в другом. Плюс какой-нибудь флаг, который сообщает всем, что пора бы закруглятся. Этот флаг может изменить любой поток. Вот и все.
1
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 01:11 6
Лучший ответ Сообщение было отмечено Komi как решение

Решение

Если поддерживает многопоточность:
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 / 5
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 01:58  [ТС] 7
Спасибо, не знал вообще что есть такой термин "многопоточность", пойду читать интернеты



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

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

я понимаю что и таймер надо в отдельный дред засунуть, но как послать ему терминацию из паралельного дреда в котором cin тусуется?
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 02:06 8
Цитата Сообщение от Komi Посмотреть сообщение
наоборот подальше от winAPI.
Если компилятор многопоточность не поддерживает (С++11), то только через WinAPI или сторонние библиотеки.
0
Komi
6 / 6 / 5
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 02:08  [ТС] 9
Цитата Сообщение от alsav22 Посмотреть сообщение
Если компилятор многопоточность не поддерживает, то только через WinAPI или сторонние библиотеки.
Поддерживает, Visual Studio 2013.
дреды работают, уже проверил, только вот как реализовать?
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 03:11 10
Цитата Сообщение от Komi Посмотреть сообщение
только вот как реализовать?
Что реализовывать будем?
0
Komi
6 / 6 / 5
Регистрация: 10.08.2012
Сообщений: 82
18.04.2014, 18:57  [ТС] 11
Цитата Сообщение от alsav22 Посмотреть сообщение
Что реализовывать будем?
ну дк, убийство оного дреда, используя другой.
как cin использовать во время таймера эт понял, но как этот таймер можно преждевременно остановить используя опять таки этот же cin?
0
alsav22
5442 / 4837 / 831
Регистрация: 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 / 5
Регистрация: 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
19.04.2014, 09:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 09:28
Привет! Вот еще темы с ответами:

Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его
Дана строка, в котором есть слово &quot;да&quot; или слово &quot;нет&quot;. Если в нем есть слово...

Напишите программу, которая выбирает правильное слово (из "bochka" , "bochek" , "bochki" ) в зависимости от N.
Бизнесмен Василий после прочтения известной книги решил открыть новый бизнес –...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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