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

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

Войти
Регистрация
Восстановить пароль
 
Mirmik
168 / 140 / 34
Регистрация: 27.02.2014
Сообщений: 742
#1

Iostream и неблокирующее чтение - C++

16.05.2016, 13:47. Просмотров 168. Ответов 13
Метки нет (Все метки)

Как сделать на iostream неблокирующее чтение? Судя по тому, что интернет как-то ничего не говорит на такую тему, я так понимаю, что это толи сложно, толи невозможно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2016, 13:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Iostream и неблокирующее чтение (C++):

В чём отличие заголовочных файлов <iostream> и <iostream.h> ? - C++
Добрый день! Учу С++ в Microsoft Visual C++ 6.0. Листинг начинал с #include &lt;iostream&gt;, и программа не работала. Но когда начал с...

<iostream.h> - C++
подскажите как заменить или где скачать библиотеку &lt;iostream.h&gt; для visual studio 2008

iostream - C++
пишу в VS 2010 подключаю библиотеку: #include &lt;iostream&gt; в тебе программы подчеркивает cout, cin и endl в ошибках пишет...

iostream vs iostream.h - C++
Я пишу include &lt;iostream.h&gt; в книге написано: расширение h оно теперь для заг файлов С а не С++ заг файлы с++ без расширения. в...

IOSTREAM.H - C++
Задача «Железнодорожник» Петя - железнодорожник со стажем на перегоне с кодовым названием &quot;Сухой бамбук&quot;. Ежедневно Петя встречается...

iostream - C++
не могу подключить iostream помагите(MS VS 2008) #include &lt;iostream&gt; и в чем отличие cin (cout) от printf &amp; scanf? Что...

13
nmcf
5356 / 4676 / 1566
Регистрация: 14.04.2014
Сообщений: 18,643
16.05.2016, 14:18 #2
Никак.
0
zss
Модератор
Эксперт С++
6484 / 6047 / 1985
Регистрация: 18.12.2011
Сообщений: 15,680
Завершенные тесты: 1
16.05.2016, 15:25 #3
Сразу после чтения запоминайте позицию и закрывайте фал.

При следующем чтении открывайте файл и перемещайтесь на запомненную позицию.
0
nmcf
5356 / 4676 / 1566
Регистрация: 14.04.2014
Сообщений: 18,643
16.05.2016, 15:38 #4
Mirmik, ты про cin спрашиваешь?
0
Mirmik
168 / 140 / 34
Регистрация: 27.02.2014
Сообщений: 742
16.05.2016, 16:50  [ТС] #5
Да, спрашиваю про потоки. А быть может в пространстве boost есть какие-нибудь потоки, которые умеют?

Добавлено через 11 минут
Я, вообще, хотел написать чтение пакета из com порта, причем граница пакета определяется по таймауту.

Написать это без костылей на iostream я так и не смог. Так что полез в boost за классом порта. Сейчас с io сервисом разбираюсь...
0
Nosey
1348 / 399 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
16.05.2016, 17:13 #6
Цитата Сообщение от Mirmik Посмотреть сообщение
неблокирующее чтение?
Как далеко не самый лучший, но простой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <thread>
#include <future>
#include <fstream>
 
int main()
{
    std::ifstream inFile("input");
    auto nonBlockReader = std::async(std::launch::async, [&inFile]()
    {   std::string ret;
        inFile >> ret;
        return ret;});
 
    std::cout << nonBlockReader.get() << std::endl;// возможно блокирует, если выполнение еще не закончено.
}
Цитата Сообщение от Mirmik Посмотреть сообщение
Сейчас с io сервисом разбираюсь
И это будет лучший выбор.
0
Mirmik
168 / 140 / 34
Регистрация: 27.02.2014
Сообщений: 742
16.05.2016, 17:34  [ТС] #7
Ну, это асинхронное, а не неблокирующее чтение...

... А как все-же мою задачу (с определением границы сообщения по таймауту) лучше решить?
0
nmcf
5356 / 4676 / 1566
Регистрация: 14.04.2014
Сообщений: 18,643
16.05.2016, 17:58 #8
Разве iostream может читать com-порт? Это, что, DOS или Linux?
0
Mirmik
168 / 140 / 34
Регистрация: 27.02.2014
Сообщений: 742
16.05.2016, 18:06  [ТС] #9
ubuntu... /dev/ttyS3...
Ну, fstream, конечно, а не iostream.
0
Nosey
1348 / 399 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
16.05.2016, 18:13 #10
Цитата Сообщение от Mirmik Посмотреть сообщение
Ну, это асинхронное, а не неблокирующее чтение...
Ну это философский вопрос.

Цитата Сообщение от Mirmik Посмотреть сообщение
А как все-же мою задачу (с определением границы сообщения по таймауту) лучше решить?
1) Я бы посоветовал копать в io_service буста, а я с этим помочь не могу, никогда не писал кастомный AsyncReadStream, но лёгкий гуглинг показал мне следующий экзампл : https://gist.github.com/kikairoya/911085.
2) Ну либо завелосипедить свой io_service.
0
Mirmik
168 / 140 / 34
Регистрация: 27.02.2014
Сообщений: 742
16.05.2016, 18:22  [ТС] #11
Nosey
Ну, нет, вопрос что ни на есть практический, хотя бы потому, что неблокирующее чтение может вернуть ноль символов, а асинхронное нет... Фактически это... ну совсем разные вещи.

Да, видимо курить буду io_service.

Добавлено через 5 минут
Ил я неправильно понимаю, что такое неблокирующее чтение?
0
Nosey
1348 / 399 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
16.05.2016, 18:34 #12
Цитата Сообщение от Mirmik Посмотреть сообщение
Ил я неправильно понимаю, что такое неблокирующее чтение?
Правильно, это я так выражаюсь, и не хочу холиварить на эту тему.

А вообще должен сказать, что если вы не используете бустовый io_service в других местах проекта, то завелосипедить минимальный io_service будет лучшей идеей в плане поддержки(чего там делать, один тред, два буфера, один мьютекс и готово и соответственно разобраться другим людям потенциально легче).
0
nmcf
5356 / 4676 / 1566
Регистрация: 14.04.2014
Сообщений: 18,643
16.05.2016, 18:39 #13
В Linux'е нет нужных функций, что ли?
0
Mirmik
168 / 140 / 34
Регистрация: 27.02.2014
Сообщений: 742
16.05.2016, 18:47  [ТС] #14
Nosey Ну, думаю, мне имеет смысл хорошенько освоить эту библиотеку, а то я так и буду изобретать эти велосипеды...

nmcf Есть... В libc есть...

Добавлено через 1 минуту
Вообще, boost и всяческие chrono и thread - крайне привлекательные штуки... Надо будет отдать пару месяцев на их изучение...
0
16.05.2016, 18:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2016, 18:47
Привет! Вот еще темы с ответами:

<iostream.h> - C++
Почему можно написать так: #include &lt;iostream.h&gt; int main() { cout &lt;&lt; &quot;HELLO!&quot; &lt;&lt; endl; } но нельзя так: #include...

iostream - C++
Я ввожу элементарный код #include &lt;iostream&gt; using namespace std; void main() { cout&lt;&lt;&quot;...&quot;; } А оно мне выбивает fatal...

iostream.h - C++
Всем привет! Кто-нибудь может выложить файл iostream.h у меня компилятор выдает ошибку fatal error C1083: Cannot open include file:...

iostream - C++
Пишет ошибки (внизу). // hihi.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include...


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

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

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