Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/131: Рейтинг темы: голосов - 131, средняя оценка - 4.52
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Архитектура: парсинг и выгрузка текстовиков

11.03.2020, 10:51. Показов 32651. Ответов 421

Студворк — интернет-сервис помощи студентам
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
Цитата Сообщение от JeyCi Посмотреть сообщение
так и не собрала эти все объекты этого класса в group class...
вроде уже собрала...
осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа...
а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль;
б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid...
===
!! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о:
Цитата Сообщение от JeyCi Посмотреть сообщение
полагаю тут Наследования никакого не пригодится?
... или как раз тут (при выборе направления выгрузки) его (наследование) делать??
===
Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями):
чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)...
p.s.
классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют...
p.p.s.
вывести конечные интерфейсы с определёнными методами записи на кнопки...
===
ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ??
===
на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы)
птицами отмечены уже кое-как реализованные классы (2 птицы)
курсивные стрелки - отсутствие наследования


Добавлено через 7 минут
вобщем вопрос:
class Table и класс I_Tbl_Show - объединить или нет?

Добавлено через 10 минут
p.p.s.
чтобы избежать проблем Ромба и такого:
Неоднозначность при множественном наследовании
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут нужно виртуальное наследование.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 10:51
Ответы с готовыми решениями:

Проверка двух текстовиков
Написать прогу на языке Си, проверяющую, совпадают ли тексты в двух файлах #include <stdio.h> #include <stdlib.h> ...

Access модуль объединения текстовиков
Добрый день. Очень нужен модуль access который будет объединять текстовые файлы с предложенной папки (каждый раз разные названия и...

Сделать скрипт для вывода текстов из текстовиков
Здравствуйте! Не могли бы помочь сделать скрипт для вывода текстов песен из текстовиков в папке. Расскажу подробней: есть папка с...

421
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
10.07.2020, 22:32  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Наоборот он у вас НЕ блокирующий.
я имела ввиду instanceAsync.Get() метод...

Цитата Сообщение от DrOffset Посмотреть сообщение
Это не ошибка, еще раз. Это статус
WhenDo тоже показался интересным событием...
а смутило - это
I couldn't find a way to asynchronously read incoming data with WebSocket
но раскручивать, действительно лучше как-то requests, чем websockets (последний не совсем то, лишь бы с асинхронностью не было так грустно в request'ах, как в последнем)...
array worker'ов
WorkQueue : public CoWork
Цитата Сообщение от DrOffset Посмотреть сообщение
Скорее всего это происходит потому, что вы пытаетесь слать данные в неблокирующий сокет без какого-либо контроля, да еще и из разных потоков. Сделайте очередь запросов к сокету, в нее будете добавлять из произвольного потока, разматывайте очередь через select\poll\etc в каком-то одном потоке.
спасибо!...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
12.07.2020, 07:37  [ТС]
Параллельное программирование на С++ в действии. Энтони Уильямс

Добавлено через 16 минут
и позаимствую ссылку от DrOffset, - О lockfree алгоритмах (+бонус)
или здесь (с одним producer'ом в моём случае, может, ещё и проще)

Добавлено через 23 минуты
и нюанс, который стоит помнить
более полезно ограничить размер очереди и таким образом сбалансировать скорость производителей, иногда переводя их в спящее состояние, с возможностями потребителей.
link
https:ru_stackoverflow_com ... / ... questions/428327/%d0%98%d0%bc%d0%bf%d0%bb%d0%b5%d0%bc%d0% b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-producer-consumer-pattern/428867#428867
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
13.07.2020, 14:59
Цитата Сообщение от DrOffset Посмотреть сообщение
При том, что дождавшись, они все ранво должны вызвать join, если в их системе под капотом потока, например, pthread.
Не должны. Здесь запускается detach-поток.
Цитата Сообщение от Ultimate++:
C++
1
static void Start(Function<void ()> cb, bool noshutdown = false)
Starts a thread and returns immediately (you cannot Wait for the thread to finish in this case).
В коде JeyCi запуск потока происходит по-другому (создается объект Thread). И если там не вызвать Wait, то поток станет detach в деструкторе.
Цитата Сообщение от Ultimate++:
C++
1
~Thread()
Destructor. Performs Detach - thread continues running.
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
13.07.2020, 15:28
GoshaM, да, действительно. Но это не отменяет сказанного выше, а лишь корректирует мысль по другой ветке рассуждений, начиная с #329.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
13.07.2020, 19:15  [ТС]
Цитата Сообщение от GoshaM Посмотреть сообщение
Destructor. Performs Detach - thread continues running.
detach, думаю, не очень хорошо - отпускать ненужный поток в свободное плавание... даже, может, ненужная эксплуатация памяти и адресного пространства (если не закрывать join'ом) - мне так кажется... даже не знаю, где такое может пригодиться?
я бы закрывала все ненужные thread'ы... имхо... через совет от DrOffset - Wait()...
а определяется detach, наверно, такой опцией:
Цитата Сообщение от GoshaM Посмотреть сообщение
bool noshutdown = false
- она, видимо, и определяет возврат в метод Start, а поток отправляет в detach состояние? (точнее метод)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.07.2020, 19:39
Цитата Сообщение от JeyCi Посмотреть сообщение
detach, думаю, не очень хорошо - отпускать ненужный поток в свободное плавание... даже, может, ненужная эксплуатация памяти и адресного пространства (если не закрывать join'ом) - мне так кажется... даже не знаю, где такое может пригодиться?
Я использую detach в пуле потоков, чтобы не держать список созданных потоков.
Необязательно ждать завершения каждого потока, достаточно подождать, пока все потоки закончат выполнять твой код (для этого достаточно счётчика), а потом пусть сами завершаются, когда хотят.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
13.07.2020, 19:58  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
в пуле потоков, ... достаточно подождать, пока все потоки закончат выполнять твой код (для этого достаточно счётчика),
счётчика фьючей? - тогда, конечно, они возвращают своим .get(), туда, где породились, блокируя IO до момента возврата, насколько понимаю... иначе, наверно, просто счётчик не поможет отследить окончание работы в потоках пула... наверно, всё равно какой-нибудь типа completion port надо мониторить и возвращать результат работы, если пул потоков не с фьючей запущен асинхронно, а с обычных thread'ов
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
13.07.2020, 20:03
Цитата Сообщение от JeyCi Посмотреть сообщение
даже не знаю, где такое может пригодиться?
Если вы вызываете Run у одного объекта Thread более одного раза без вызова Wait между ними, вы уже это делаете неявно:
Цитата Сообщение от JeyCi Посмотреть сообщение
void MyAppWindow::btn1_Click()
{
    this->btn_1.Disable();
    work.Run( [=]{WorkerThread ();} );    
}
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.07.2020, 20:04
Цитата Сообщение от JeyCi Посмотреть сообщение
счётчика фьючей? - тогда, конечно, они возвращают своим .get(), туда, где породились, блокируя IO до момента возврата, насколько понимаю... иначе, наверно, просто счётчик не поможет отследить окончание работы в потоках пула... наверно, всё равно какой-нибудь типа completion port надо мониторить и возвращать результат работы, если пул потоков не с фьючей запущен асинхронно, а с обычных thread'ов
Нет, просто счётчик запущенных потоков - увеличивается при запуске и уменьшается при завершении потока.
Проблема с join в том, что чтобы его сделать нужно где-то хранить ссылки на экземпляры потоков, в каком-то списке. Если потоки часто запускаются/завершаются - типичный сценарии для пула - надо как-то чистить этот список, а это не самая весёлая задача.
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
13.07.2020, 20:20
oleg-m1973, можно не останавливать потоки в пуле, а просто усыплять до получения новых задач. Все-таки старт-остановки потока - это достаточно тяжелые операции.
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.07.2020, 20:23
Цитата Сообщение от DrOffset Посмотреть сообщение
oleg-m1973, можно не останавливать потоки в пуле, а просто усыплять до получения новых задач. Все-таки старт-остановки потока - это достаточно тяжелые операции.
Потоков может быть очень много.
Там обычно указывается количество постоянных потоков - тех, которые не завершаются, и количество потоков, которые выполняют задачи, пока они есть и, если задач нет, завершаются. В винде для пула по умолчанию это 1 и 500 соответственно.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
13.07.2020, 20:30
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Потоков может быть очень много.
Может. Только зачем?
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
13.07.2020, 20:32  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Нет, просто счётчик запущенных потоков - увеличивается при запуске и уменьшается при завершении потока.
я примерно это и имела ввиду
Цитата Сообщение от JeyCi Посмотреть сообщение
а можно и handler'ы на файлы мониторить, сравнивая с количеством handler'ов на на promises ...
- чтобы окончание подгрузки увидеть... реализация показалась сложной - не для моего уровня самостоятельного написания... может, дорасту когда...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.07.2020, 20:33
Цитата Сообщение от DrOffset Посмотреть сообщение
Может. Только зачем?
В смысле, зачем? Ну, например, обработка запросов по сокетам.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
13.07.2020, 20:43  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Может. Только зачем?
мне грузить надо ~500 за день... при загрузке за, например, 5 дней - даже математику можно успеть вспомнить...

Добавлено через 5 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ну, например, обработка запросов по сокетам.
но у меня он один, вроде, с 1-го моего пк (так сказать клиента)... хотя на серверах в U++ не очень весело... имхо...
вобщем ковыряю асинхронность... благо httpRequest.Do() позволяет выделять все phases query'я
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.07.2020, 20:47
Цитата Сообщение от JeyCi Посмотреть сообщение
но у меня он один, вроде, с 1-го моего пк (так сказать клиента)... хотя на серверах в U++ не очень весело... имхо...
Это я просто привёл первый пример, который пришёл в голову. Пул потоков я тоже привёл для примера того, где можно использовать detach. Тебе необязательно всё это использовать
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
13.07.2020, 20:52  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Может. Только зачем?
а вообще резонный вопрос - если они будут стоять в очереди на ядро... :
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
13.07.2020, 20:53
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В смысле, зачем?
Зачем их заводить больше, чем есть ядер? Особенно 500.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
13.07.2020, 20:58  [ТС]
? поможет ли это потом сокету - эта многопоточность пула ... ускориться

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем их заводить больше, чем есть ядер?
вот тоже помню совет QuantityCores*2 т.е. текущие и следующие за ними jobs в очередь

Добавлено через 2 минуты
поэтому
Цитата Сообщение от JeyCi Посмотреть сообщение
ковыряю асинхронность...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.07.2020, 21:02
Цитата Сообщение от JeyCi Посмотреть сообщение
а вообще резонный вопрос - если они будут стоять в очереди на ядро... :
Ели они выполняют какие-то ждущие задачи, например отправляют запрос в базу, работают с файлами, отправляют что-то по сокетам и т.д., то они не будут стоять в очереди на ядро. В основном они будут спать в ожидании завершения своей задачи.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2020, 21:02

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и как ее исправить?

архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников
сабж. кто чем может помочь юному,непонемающему в этой области человеку.желательно книгами.спасибо.

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку &quot;Проверить соединение&quot; Я прочитал, что это возможно из за того, что моя система 64, а...

Архитектура бд
Я начинающий php-разраб. Пишу свой проект для своего города. Но встал вопрос о архитектуре. Пользователь создает свою страницу с...

Архитектура БД
Доброго времени суток.Задание написать АИС Учёт абонентов телефонной сети предприятия. Краткое описание предметной области: В состав...


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

Или воспользуйтесь поиском по форуму:
360
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru