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

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

Восстановить пароль Регистрация
 
Mirmik
 Аватар для Mirmik
107 / 79 / 22
Регистрация: 27.02.2014
Сообщений: 434
16.05.2016, 13:47     Iostream и неблокирующее чтение #1
Как сделать на iostream неблокирующее чтение? Судя по тому, что интернет как-то ничего не говорит на такую тему, я так понимаю, что это толи сложно, толи невозможно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2016, 13:47     Iostream и неблокирующее чтение
Посмотрите здесь:

C++ iostream vs iostream.h
C++ <iostream.h>
iostream.h C++
iostream C++
IOSTREAM.H C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4299 / 3720 / 1253
Регистрация: 14.04.2014
Сообщений: 14,551
16.05.2016, 14:18     Iostream и неблокирующее чтение #2
Никак.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,178
Завершенные тесты: 1
16.05.2016, 15:25     Iostream и неблокирующее чтение #3
Сразу после чтения запоминайте позицию и закрывайте фал.

При следующем чтении открывайте файл и перемещайтесь на запомненную позицию.
nmcf
4299 / 3720 / 1253
Регистрация: 14.04.2014
Сообщений: 14,551
16.05.2016, 15:38     Iostream и неблокирующее чтение #4
Mirmik, ты про cin спрашиваешь?
Mirmik
 Аватар для Mirmik
107 / 79 / 22
Регистрация: 27.02.2014
Сообщений: 434
16.05.2016, 16:50  [ТС]     Iostream и неблокирующее чтение #5
Да, спрашиваю про потоки. А быть может в пространстве boost есть какие-нибудь потоки, которые умеют?

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

Написать это без костылей на iostream я так и не смог. Так что полез в boost за классом порта. Сейчас с io сервисом разбираюсь...
Nosey
 Аватар для Nosey
1184 / 351 / 102
Регистрация: 22.10.2014
Сообщений: 786
Завершенные тесты: 2
16.05.2016, 17:13     Iostream и неблокирующее чтение #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 сервисом разбираюсь
И это будет лучший выбор.
Mirmik
 Аватар для Mirmik
107 / 79 / 22
Регистрация: 27.02.2014
Сообщений: 434
16.05.2016, 17:34  [ТС]     Iostream и неблокирующее чтение #7
Ну, это асинхронное, а не неблокирующее чтение...

... А как все-же мою задачу (с определением границы сообщения по таймауту) лучше решить?
nmcf
4299 / 3720 / 1253
Регистрация: 14.04.2014
Сообщений: 14,551
16.05.2016, 17:58     Iostream и неблокирующее чтение #8
Разве iostream может читать com-порт? Это, что, DOS или Linux?
Mirmik
 Аватар для Mirmik
107 / 79 / 22
Регистрация: 27.02.2014
Сообщений: 434
16.05.2016, 18:06  [ТС]     Iostream и неблокирующее чтение #9
ubuntu... /dev/ttyS3...
Ну, fstream, конечно, а не iostream.
Nosey
 Аватар для Nosey
1184 / 351 / 102
Регистрация: 22.10.2014
Сообщений: 786
Завершенные тесты: 2
16.05.2016, 18:13     Iostream и неблокирующее чтение #10
Цитата Сообщение от Mirmik Посмотреть сообщение
Ну, это асинхронное, а не неблокирующее чтение...
Ну это философский вопрос.

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

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

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

А вообще должен сказать, что если вы не используете бустовый io_service в других местах проекта, то завелосипедить минимальный io_service будет лучшей идеей в плане поддержки(чего там делать, один тред, два буфера, один мьютекс и готово и соответственно разобраться другим людям потенциально легче).
nmcf
4299 / 3720 / 1253
Регистрация: 14.04.2014
Сообщений: 14,551
16.05.2016, 18:39     Iostream и неблокирующее чтение #13
В Linux'е нет нужных функций, что ли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2016, 18:47     Iostream и неблокирующее чтение
Еще ссылки по теме:

iostream C++
iostream C++
В чём отличие заголовочных файлов <iostream> и <iostream.h> ? C++

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

Или воспользуйтесь поиском по форуму:
Mirmik
 Аватар для Mirmik
107 / 79 / 22
Регистрация: 27.02.2014
Сообщений: 434
16.05.2016, 18:47  [ТС]     Iostream и неблокирующее чтение #14
Nosey Ну, думаю, мне имеет смысл хорошенько освоить эту библиотеку, а то я так и буду изобретать эти велосипеды...

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

Добавлено через 1 минуту
Вообще, boost и всяческие chrono и thread - крайне привлекательные штуки... Надо будет отдать пару месяцев на их изучение...
Yandex
Объявления
16.05.2016, 18:47     Iostream и неблокирующее чтение
Ответ Создать тему
Опции темы

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