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

Как можно представить себе поток? - C++

Восстановить пароль Регистрация
 
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
17.08.2014, 13:19     Как можно представить себе поток? #1
Как можно представить себе потоки в С++? В книге конечно разъясняют, но ориентируются видимо не на таких гуманитариев, как я.

Возникают вопросы по поводу: где этот поток вообще находится? Почему одни пишут, что он уже предопределен в операционной системе, а книга говорит, что поток - это классовый объект, но класс, он ведь создается не в операционной системе? Как визуализировать себе эту абстракцию? и так далее... Википедия заводит только в темный лес...

Я задавал уже вопросы косвенно относящиеся к потокам, но хоть там и были хорошие ответы, понять их толком у меня не очень получилось, за что извиняюсь.

В книге у меня возникает путаница, когда в книге, одними и теми же словами пытаются объяснить разные вещи.

Если дадите ссылку на источник для гуманитариев, буду премного благодарен, если же сами разъясните, буду благодарен еще больше. Если будете объяснять, то прошу вас с примерами, вроде "видишь дома, их 4", хотя я не думаю, что если будете объяснять как-то по-сложней у меня возникнут серьезные проблемы.

Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,964
17.08.2014, 13:49     Как можно представить себе поток? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как можно представить себе потоки в С++? В книге конечно разъясняют, но ориентируются видимо не на таких гуманитариев, как я.
Ну, скажем, как телефон. Я на своем конце кричу "Ало!" (отправляю данные в исходящий поток). На вашем конце слышно ровно тоже самоле "Ало!" (входящий поток). Никакой дополнительной информации (например, кто звонил) не отправляется. "Ало!" в трубку крикнули, "Ало!" на другом конце и появилось. Максимум, у потока есть функция eof (проверяет "на том конце повесили трубку").
Почему одни пишут, что он уже предопределен в операционной системе, а книга говорит, что поток - это классовый объект, но класс, он ведь создается не в операционной системе?
В системе предопределен "телефон" в который можно кричать "Ало!". А стандартные std::cin и std::cout это трубка в которую надо говорить.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2014, 13:49     Как можно представить себе поток? #3
есть потоки выполнения, а есть потоки данных, о каких спрашиваете вы?
-=ЮрА=-
Заблокирован
Автор FAQ
17.08.2014, 13:51     Как можно представить себе поток? #4
Процесс - это бизнесмен, у которого есть наемные чернорабочие (потоки). Время от времени перед бизнесменом возникают задачи - "построить дом", "разгрузить машину", в зависимости от её размера на решение её бизнесен нанимает от 1-го до нескольких рабочих.
Саму же задачу каждый бизнесменн получает из "конторы" - планировщика задач.
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
17.08.2014, 13:54  [ТС]     Как можно представить себе поток? #5
Jupiter, скорее всего про потоки данных

Добавлено через 1 минуту
-=ЮрА=-, Задачи вроде вывода информации? То есть cout - это поток, то есть чернорабочий?

Добавлено через 1 минуту
Renji, print(""); - это тоже трубка?
-=ЮрА=-
Заблокирован
Автор FAQ
17.08.2014, 13:56     Как можно представить себе поток? #6
Цитата Сообщение от Unifan Посмотреть сообщение
-=ЮрА=-, Задачи вроде вывода информации? То есть cout - это поток, то есть чернорабочий?
- cout в абстракции - это перенаправление работы "чернорабочего" на устроство вывода -проще всего так представить : рабочий испёк булочек, а уж отправить их в магазин(монитор) или на склад (в файл) решает бизнесмен, которому указание на направление продукции выдал сам пользователь. Не путай потоки данных и потоки процессов(разные сущности с похожими названиями). Поток данных - это лишь канал по которому идёт продукция (данные), создали это продукцию потоки определённого процесса
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,964
17.08.2014, 14:00     Как можно представить себе поток? #7
Renji, print(""); - это тоже трубка?
В принципе да, оно отправляет данные в тот же самый стандартный поток вывода что и cout.
Gwini
10 / 10 / 3
Регистрация: 08.03.2014
Сообщений: 70
17.08.2014, 14:19     Как можно представить себе поток? #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если абстрагировать роботу потоков даных то можно вообразить это как водопровод. С одной стороны трубы тот кто подает воду(например объект cout), а с другой потребитель этой воды(например консоль). Тогда самая труба это операция "<< ", а вода это напрмер какая-то переменная. Ну в общем как то так: cout (водопроводчики — подают воду) <<(труба) вода(переменная). В конечном результате потребитель(в даном случае консоль) получит свою воду(переменную в виде текствой информации).
Все это усложняется посредством буфера — это когда вода накапливается в определенном резервуаре, а потом одноразово передается потребителю, вместо того что бы капля за капалей(то есть побайтно) передавать воду(информацию). Но про буфер вам наверное лучше отдельно почитать.(Хотя в приницпе — ничего сложного).
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
17.08.2014, 14:24     Как можно представить себе поток? #9
Цитата Сообщение от Unifan Посмотреть сообщение
Как можно представить себе потоки в С++?
Ну, входной поток и выходной поток – это абстракции, суть которых в том, что из первого можно последовательно получить данные, а во второй последовательно отправить. Вот и все, собственно. Причем не сырые данные в виде битов и байтов, а любого типа, в том числе определенного пользователем. В С++ весь обмен данными через потоки устроен.
Что касается внутреннего устройства потока, то он содержит объект-буфер, унаследованный от класса basic_streambuf, который занимается низкоуровневым хранением данных потока, и хранит их в виде последовательностей символов либо в оперативной памяти, либо во внешнем файле.
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
17.08.2014, 14:26  [ТС]     Как можно представить себе поток? #10
Gwini, Когда вы только первый раз начали изучать С++, как вы представляли себе поток?

Добавлено через 1 минуту
Mr.X, После разговорах о буферах мне становится страшновато. Стоит ли мне сейчас зацикливаться над этими понятиями, или продолжать читать учебник и уже при изучении полного справочника по С++ накалпливать такие глубокие знания?
Возможно, что произойдет такое осинение и я пойму все по мере программирования?
Gwini
10 / 10 / 3
Регистрация: 08.03.2014
Сообщений: 70
17.08.2014, 14:33     Как можно представить себе поток? #11
Unifan, изучать то я начал месяца полтора назад, про ввод/ввывод вообще недавно прочитал. Представлял как трубопроводы, т.к. в книжке картинка была такая Я прикрепил, если что это с книги С. Праты.
Миниатюры
Как можно представить себе поток?   Как можно представить себе поток?   Как можно представить себе поток?  

Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
17.08.2014, 14:33     Как можно представить себе поток? #12
Цитата Сообщение от Unifan Посмотреть сообщение
После разговорах о буферах мне становится страшновато. Стоит ли мне сейчас зацикливаться над этими понятиями
Да нет, я думаю. Просто понять, что поток - это абстракция для последовательного ввода-вывода данных. А обличье она совершенно разное может принимать - это может быть и устройство, и строка, и контейнер, и все что угодно.
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
17.08.2014, 14:36  [ТС]     Как можно представить себе поток? #13
Mr.X, Спасибо за облегчение так сказать.
Gwini, Очень вам благодарен, я обязательно прочту тот материал
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
18.08.2014, 17:21  [ТС]     Как можно представить себе поток? #14
Mr.X, я вот начал перечитывать про потоки и заметил интересную вестч. Поток основан на системе ввода-вывода С++, которая в свою очередь реализована через сложную систему иерархий классов -> потоки такие как cout, cin, cerr, clog - это не более чем грубо говоря "объекты классов ввода-вывода". Можно не забивать себе голову абстракциями и представлять поток, как объект для ввода-вывода данных? Или он все-таки не является объектом?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2014, 17:41     Как можно представить себе поток?
Еще ссылки по теме:

как можно сделать виртуальный поток ввода\вывода C++
Как можно представить данные отрывки кода из Pascal в C++ C++
Можно ли представить значение переменной как имя файла? C++

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
18.08.2014, 17:41     Как можно представить себе поток? #15
Цитата Сообщение от Unifan Посмотреть сообщение
Можно не забивать себе голову абстракциями и представлять поток, как объект для ввода-вывода данных? Или он все-таки не является объектом?
Ну, я, собственно, это и пытался сказать, только другими словами. Ну да, потоки, применяемые в программе, это объекты потоковых классов.

Добавлено через 4 минуты
Собственно, класс в С++ - это абстрактный тип данных, т.е. тип, описывающий некоторую абстракцию, а объект этого класса эту абстракцию реализует.
Yandex
Объявления
18.08.2014, 17:41     Как можно представить себе поток?
Ответ Создать тему
Опции темы

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