@ProCxx

Страница 2088 из 2477
Nik
23.05.2018
19:03:27
Есть такой (местами псевдо)код. asio::ip::udp::endpoint clientEndPoint; while(true) { char buff[4096] = {0}; size_t bytesReceived = serverSocket->receive_from(asio::buffer(buff), clientEndPoint); if (bytesReceived != 0) { auto message = message(buff); std::thread t([message]() { process(message); }); t.join(); } } Который обрабатывает входящее сообщение, откуда бы оно не пришло, адрес клиента записывает в clientEndPoint и запускает обработку сообщения в отдельном треде. Но в методе process() описан сценарий диалога - что послать обратно по этому адресу и что ожидать в ответ, с тем же receive_from под капотом. Но дело в том что сообщение которое относится к диалогу может приняться в этом куске который я скинул, а не внутри process() Как это разрешить, и какой вообще нормальный архитектурный подход к такой проблеме?

Max
23.05.2018
19:05:51
Товарищи, всем спасибо)

запихну в тред cv, с объектами буду хранить steady_clock::now + duration.

Google
Constantine
23.05.2018
19:08:07
там еще вопрос нужен ли отзыв

технически есть стандартная схемка с двумя точками отзыва на shared_ptr

в которой из очереди вообще ничего не удаляется

Max
23.05.2018
19:10:03
Товарищи, всем спасибо)
посмотри тут есть пример реализации https://github.com/chriskohlhoff/executors

Constantine
23.05.2018
19:12:02
Max
23.05.2018
19:13:54
да. от автора boost.asio

Nik
23.05.2018
19:17:01
делать один receive_from, завести dialog id, по треду на запрос весело =)
Ну так-то по треду на диалог. Я знаю, что это плохо, но в упор не вижу нормального способа. Если получать только из одной метода, то как мне знать что вообще делать с прилетевшим сообщением? Грубо говоря, сейчас я могу описать сценарий диалога в виде void onScenario1() { send(someRequest); receive(someResponse); send(someOtherRequest); receive(someOtherResponse); } И все это ломается если добавить многопоточность.

Constantine
23.05.2018
19:18:04
вообще как человек, замученный гуем, я в итоге навелосипедировал модель, в которой есть основной поток и работяги, и меня безумно напрягают модели без гарантий выполнения на одном потоке

например, без синхронизирующего потока невозможно давать гарантии отзыва на цепочках вычисления A(B(C()))

Alex
23.05.2018
19:21:47
это очевидно что 1 поток 1 стейт, а чейнинг нейскольких потоков означает головняк с синхронизацией что бы действие казалось атомарным

реактивность не дебилы придумали

Max
23.05.2018
19:23:01
технически есть стандартная схемка с двумя точками отзыва на shared_ptr
А что за стандартная схемка? Где бы почитать? Отзыв есть. Коллекция — это, семантически, map. На тот же ключ может быть повешен другой объект, с другим таймаутом (или вообще без него).

Google
Constantine
23.05.2018
19:33:06
А что за стандартная схемка? Где бы почитать? Отзыв есть. Коллекция — это, семантически, map. На тот же ключ может быть повешен другой объект, с другим таймаутом (или вообще без него).
А фиг знает, увидел где-то в разборе кода. Идея в том, что shared_ptr<структура с atomic_bool> отлично описывает многосторонний отзыв

Igor
23.05.2018
20:16:31
#offtop российские пользователи часом не испытвают никаких проблем с плюсовой конфой в слаке? третий день треш какой-то, у товарища в неё вообще никак не пускает, у меня только через веб, приложеньки посдыхали в вечном connecting...

Alexey
23.05.2018
20:23:25
слак у роспровайдеров уже месяц как подох(но иногда оживает)

Владислав
23.05.2018
20:25:16
слак уле=еле работает, да

Pika
23.05.2018
20:53:07
Есть такой (местами псевдо)код. asio::ip::udp::endpoint clientEndPoint; while(true) { char buff[4096] = {0}; size_t bytesReceived = serverSocket->receive_from(asio::buffer(buff), clientEndPoint); if (bytesReceived != 0) { auto message = message(buff); std::thread t([message]() { process(message); }); t.join(); } } Который обрабатывает входящее сообщение, откуда бы оно не пришло, адрес клиента записывает в clientEndPoint и запускает обработку сообщения в отдельном треде. Но в методе process() описан сценарий диалога - что послать обратно по этому адресу и что ожидать в ответ, с тем же receive_from под капотом. Но дело в том что сообщение которое относится к диалогу может приняться в этом куске который я скинул, а не внутри process() Как это разрешить, и какой вообще нормальный архитектурный подход к такой проблеме?
Стандартная схемка заводить сессию на каждый коннект, которая по сути fsm. Куски этой fsm реакции на сетевые или не сетевые события. Всё состояние хранится в членах класса или ссылаются на разделённые переменные. А вообще иди экзамплы от asio проботай

Pika
23.05.2018
21:16:41
Макоронный монстр?
Ну это же boost:asio. Можно, конечно, что-то навертухать или spawn заиспользовать. Вдруг понял, что у @NikBond не знает как состояние пошарить между двумя тредами.

Vyacheslav
23.05.2018
21:32:00
Доброй ночи. Есть живые?

Дима
23.05.2018
21:33:30
Все got free'd

TriΔng3l
23.05.2018
21:33:44
Disposed

Некто
23.05.2018
21:33:57
Доброй ночи. Есть живые?
Это становится комичным. После питона ты решил переписать все на плюсы?))

TriΔng3l
23.05.2018
21:34:01
Это end.

Vyacheslav
23.05.2018
21:34:22
Это становится комичным. После питона ты решил переписать все на плюсы?))
На питоне горящий проект на бабло, а на крестах пишу курсовую)

Некто
23.05.2018
21:34:29
)))

TriΔng3l
23.05.2018
21:34:46
Пишу на Си две курсовые)

По сетям игруля с UDP и glBegin/glVertex3f

Дима
23.05.2018
21:35:54
совмести и будет quake 3

TriΔng3l
23.05.2018
21:35:55
И по базам данных веб-приложение с libmicrohttpd и SQLite

совмести и будет quake 3
Я Ricochet хочу свой сделать

Vyacheslav
23.05.2018
21:36:24
Собсна, вопрос Как можно реализовать шарповский аналог += EventHandler, т.е. описанную пользователем функцию выполнять конкретным объектом

Google
TriΔng3l
23.05.2018
21:36:42
Там коллизии простые очень, цилиндры с цилиндрами

Дима
23.05.2018
21:37:33
свой класс делегатов можно написать и добавить этот оператор

Vyacheslav
23.05.2018
21:38:07
по-нормальному

TriΔng3l
23.05.2018
21:38:19
По-анархопримитивистски — массив указателей на функции и счётчик

А, про this забыл

Ну, массив структур

Vyacheslav
23.05.2018
21:39:12
у меня простенькая работа

но скрины сюда нельзя

Aidar
23.05.2018
21:39:30
по-нормальному
Реактивное программирование, но тут надо чуть мышление перестроить

Vyacheslav
23.05.2018
21:39:33
коротко - фреймворчик для работы с дисплеями

TriΔng3l
23.05.2018
21:40:02
Aidar
23.05.2018
21:40:03
у меня простенькая работа
А ну тогда метод напиши <зарегистрируй эту штуку как коллбек>

И храни вектор из function

TriΔng3l
23.05.2018
21:40:58
И пускай в нём уже пользователь либы явно пишет, что ему надо

В том числе и пробегает по вектору коллбеков

Но это по желанию

Vyacheslav
23.05.2018
21:42:07
Да в том то и дело, что на каждый экземпляр может быть свой метод

потому что разные кнопки вызывают разные действия

Aidar
23.05.2018
21:42:52
Ну кстати да, лучше задавать сразу толпой при конструировании чем регистрировать в процессе

Google
Vyacheslav
23.05.2018
21:43:36
опуститесь на один уровень ниже в речи, пожалуйста)

Aidar
23.05.2018
21:43:38
Vyacheslav
23.05.2018
21:43:46
я понимаю через слово

Aidar
23.05.2018
21:44:11
Люди до сих пор не придумали как это адекватно делать

Vyacheslav
23.05.2018
21:45:40
а что там сложного

ногами мк подёргал

Aidar
23.05.2018
21:45:44
Ну смари: Button b; b.registerEvent(call back); Или Button b{call back};

Vyacheslav
23.05.2018
21:45:50
разметку отправил

Aidar
23.05.2018
21:47:11
Если у тебя мк тебе может не подойти фанкшн

Побитый
23.05.2018
21:47:32
/help@FailsBot

FailsBot
23.05.2018
21:47:33
/help@FailsBot
USAGE: /help - prints this message; /vzhuh [message] - do vzhuh; /start - info about bot.

Aidar
23.05.2018
21:47:56
Я бы попытался написать статический интерфейс на шаблонах логика которого максимально раскрывается в компильтайме

Побитый
23.05.2018
21:48:00
/start@FailsBot

FailsBot
23.05.2018
21:48:01
/start@FailsBot
Hello! I am the FailsBot, working as daemon process written in C with love and in rush in one night in Vim at Android device. Now I use the *stupid* person which hardcoded on main module therefore I have been often restarted. Stay determined! Feel free to write your suggestions to the bot's author in the @fludpac chat.

Побитый
23.05.2018
21:48:22
Блеан, скиньте список чатов кто-нибудь)

Aidar
23.05.2018
21:49:05
@proDOT

TriΔng3l
23.05.2018
21:50:18
Ненавижу второй вариант

Aidar
23.05.2018
21:51:02
Ненавижу второй вариант
Второй вариант более статичен следовательно хорош не?

TriΔng3l
23.05.2018
21:51:32
Как и вообще какие-либо серьёзные параметры в конструкторах

Google
TriΔng3l
23.05.2018
21:51:52
Aidar
23.05.2018
21:51:52
ООП это по большей части конструирование

TriΔng3l
23.05.2018
21:52:34
Вообще, тут, скорее, статично будет создаваться

ООП это по большей части конструирование
Сложные ифы в список инициализации хрен впихнёшь, разве что через страшные лямбды

Aidar
23.05.2018
21:53:43
TriΔng3l
23.05.2018
21:53:54
Как ты на вулкане ваще пишешь
Там структуры, в них можно в любой момент писать что хочешь при любых условиях

Побитый
23.05.2018
21:54:04
Вопрос: является ли std::cout потокобезопасным?

Aidar
23.05.2018
21:54:32
Там структуры, в них можно в любой момент писать что хочешь при любых условиях
Эти структуры используются как параметры при конструировании, эти параметры декомпозированы в структуры, я это и имею ввиду

Побитый
23.05.2018
21:55:27
Нет
Уверен на 100%? Это прям в стандарте написано?

TriΔng3l
23.05.2018
21:55:30
Эти структуры используются как параметры при конструировании, эти параметры декомпозированы в структуры, я это и имею ввиду
Если б в C++ можно было вызывать конструкторы полей и super в теле конструктора, я бы был полностью доволен ими

А костыль, который после двоеточия, бесит

Aidar
23.05.2018
21:55:53
Уверен на 100%? Это прям в стандарте написано?
Уверен что он не потокобезопасен по стандарту, что там конкретно написано хз

Страница 2088 из 2477