
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
в которой из очереди вообще ничего не удаляется

Alexander
23.05.2018
19:09:10

Max
23.05.2018
19:10:03

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

Google

Constantine
23.05.2018
19:33:06

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


Aidar
23.05.2018
21:11:19

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

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

Google

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

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

TriΔng3l
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
А костыль, который после двоеточия, бесит

Aidar
23.05.2018
21:55:53