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

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

11.03.2020, 10:51. Показов 32385. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru