Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40

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

17.08.2014, 13:19. Показов 2592. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно представить себе потоки в С++? В книге конечно разъясняют, но ориентируются видимо не на таких гуманитариев, как я.

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

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

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

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

Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2014, 13:19
Ответы с готовыми решениями:

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

Поток ввода cin работает сам по себе
Привет :) Написал программу, забыл поставить после условия строку для ввода символов cin. Но он работает и так без меня. Т.е. я ввожу...

Как можно представить множества как вектора произвольной длины
Собственно в названии всё сказано.. Не совсем понимаю как это можно представить на C++.. если имеется в виду массив, то понятно, но...

14
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
17.08.2014, 13:49
Лучший ответ Сообщение было отмечено Unifan как решение

Решение

Как можно представить себе потоки в С++? В книге конечно разъясняют, но ориентируются видимо не на таких гуманитариев, как я.
Ну, скажем, как телефон. Я на своем конце кричу "Ало!" (отправляю данные в исходящий поток). На вашем конце слышно ровно тоже самоле "Ало!" (входящий поток). Никакой дополнительной информации (например, кто звонил) не отправляется. "Ало!" в трубку крикнули, "Ало!" на другом конце и появилось. Максимум, у потока есть функция eof (проверяет "на том конце повесили трубку").
Почему одни пишут, что он уже предопределен в операционной системе, а книга говорит, что поток - это классовый объект, но класс, он ведь создается не в операционной системе?
В системе предопределен "телефон" в который можно кричать "Ало!". А стандартные std::cin и std::cout это трубка в которую надо говорить.
3
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2014, 13:49
есть потоки выполнения, а есть потоки данных, о каких спрашиваете вы?
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.08.2014, 13:51
Процесс - это бизнесмен, у которого есть наемные чернорабочие (потоки). Время от времени перед бизнесменом возникают задачи - "построить дом", "разгрузить машину", в зависимости от её размера на решение её бизнесен нанимает от 1-го до нескольких рабочих.
Саму же задачу каждый бизнесменн получает из "конторы" - планировщика задач.
0
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
17.08.2014, 13:54  [ТС]
Jupiter, скорее всего про потоки данных

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

Добавлено через 1 минуту
Renji, print(""); - это тоже трубка?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.08.2014, 13:56
Цитата Сообщение от Unifan Посмотреть сообщение
-=ЮрА=-, Задачи вроде вывода информации? То есть cout - это поток, то есть чернорабочий?
- cout в абстракции - это перенаправление работы "чернорабочего" на устроство вывода -проще всего так представить : рабочий испёк булочек, а уж отправить их в магазин(монитор) или на склад (в файл) решает бизнесмен, которому указание на направление продукции выдал сам пользователь. Не путай потоки данных и потоки процессов(разные сущности с похожими названиями). Поток данных - это лишь канал по которому идёт продукция (данные), создали это продукцию потоки определённого процесса
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
17.08.2014, 14:00
Renji, print(""); - это тоже трубка?
В принципе да, оно отправляет данные в тот же самый стандартный поток вывода что и cout.
0
11 / 11 / 3
Регистрация: 08.03.2014
Сообщений: 70
17.08.2014, 14:19
Лучший ответ Сообщение было отмечено Unifan как решение

Решение

Если абстрагировать роботу потоков даных то можно вообразить это как водопровод. С одной стороны трубы тот кто подает воду(например объект cout), а с другой потребитель этой воды(например консоль). Тогда самая труба это операция "<< ", а вода это напрмер какая-то переменная. Ну в общем как то так: cout (водопроводчики — подают воду) <<(труба) вода(переменная). В конечном результате потребитель(в даном случае консоль) получит свою воду(переменную в виде текствой информации).
Все это усложняется посредством буфера — это когда вода накапливается в определенном резервуаре, а потом одноразово передается потребителю, вместо того что бы капля за капалей(то есть побайтно) передавать воду(информацию). Но про буфер вам наверное лучше отдельно почитать.(Хотя в приницпе — ничего сложного).
2
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.08.2014, 14:24
Цитата Сообщение от Unifan Посмотреть сообщение
Как можно представить себе потоки в С++?
Ну, входной поток и выходной поток – это абстракции, суть которых в том, что из первого можно последовательно получить данные, а во второй последовательно отправить. Вот и все, собственно. Причем не сырые данные в виде битов и байтов, а любого типа, в том числе определенного пользователем. В С++ весь обмен данными через потоки устроен.
Что касается внутреннего устройства потока, то он содержит объект-буфер, унаследованный от класса basic_streambuf, который занимается низкоуровневым хранением данных потока, и хранит их в виде последовательностей символов либо в оперативной памяти, либо во внешнем файле.
1
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
17.08.2014, 14:26  [ТС]
Gwini, Когда вы только первый раз начали изучать С++, как вы представляли себе поток?

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

1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.08.2014, 14:33
Цитата Сообщение от Unifan Посмотреть сообщение
После разговорах о буферах мне становится страшновато. Стоит ли мне сейчас зацикливаться над этими понятиями
Да нет, я думаю. Просто понять, что поток - это абстракция для последовательного ввода-вывода данных. А обличье она совершенно разное может принимать - это может быть и устройство, и строка, и контейнер, и все что угодно.
1
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
17.08.2014, 14:36  [ТС]
Mr.X, Спасибо за облегчение так сказать.
Gwini, Очень вам благодарен, я обязательно прочту тот материал
0
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
18.08.2014, 17:21  [ТС]
Mr.X, я вот начал перечитывать про потоки и заметил интересную вестч. Поток основан на системе ввода-вывода С++, которая в свою очередь реализована через сложную систему иерархий классов -> потоки такие как cout, cin, cerr, clog - это не более чем грубо говоря "объекты классов ввода-вывода". Можно не забивать себе голову абстракциями и представлять поток, как объект для ввода-вывода данных? Или он все-таки не является объектом?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
18.08.2014, 17:41
Цитата Сообщение от Unifan Посмотреть сообщение
Можно не забивать себе голову абстракциями и представлять поток, как объект для ввода-вывода данных? Или он все-таки не является объектом?
Ну, я, собственно, это и пытался сказать, только другими словами. Ну да, потоки, применяемые в программе, это объекты потоковых классов.

Добавлено через 4 минуты
Собственно, класс в С++ - это абстрактный тип данных, т.е. тип, описывающий некоторую абстракцию, а объект этого класса эту абстракцию реализует.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2014, 17:41
Помогаю со студенческими работами здесь

Можно ли представить значение переменной как имя файла?
К примеру переменной х присваиваем случайное значение от 1 до 10, и в зависимости от того, чему равен х, результат записываем в файл с...

Как можно представить данные отрывки кода из Pascal в C++
Как можно представить данные отрывки кода из Pascal в C++: If ord(c) in then s:=chr(ord(s)+1) for i:=1 to length(S) do

Как можно представить цикл с изменяемым параметром итерации?
Имеется простой цикл - function proceed() { for(int i=0; i&lt;3;i++) { Use(MyArray.object) } ...

Можно ли число C представить как разность квадратов двух натуральных чисел?
/*Можно ли число C представить как разность квадратов двух натуральных чисел?*/ #include &lt;iostream&gt; using namespace std; int...

Можно ли представить структуру как элемент массива, т е массив состоящий из однотипных структур
Можно ли представить структуру как элемент массива, т е массив состоящий из однотипных структур


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru