• Проектирование и архитектура приложений?

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

    @MarkusD Куратор тега C++
    Кирилл Игнатьев , ты лучше расскажи, почему ты думаешь что в твоем коде нет функции? :)
  • Проектирование и архитектура приложений?

    Кирилл Горелов , дай-ка я тебе сразу покажу бойлерплейт в твоем подходе.
    Logger.log('старт скрипта') - это что, каждую функцию так начинать и заканчивать?
    Logger.log('Нормально все прошло идем дальше') - это ты в каждом удобном месте писать хочешь?

    Так недолго и замучить себя нудным репитативом, а еще так очень легко размыть код алгоритма и код поддержки/обеспечения алгоритма. На питоне я бы тебе посоветовал использовать декоратор для автоматической вставки логов в начало и конец функции, а для трассировки этапов функции хорошо бы подошел контекстный менеджер.

    Посмотри как такие декораторы пишутся и как работают. Например так (мной не очень любимая форма), или вот так, что мне нравится больше. И про контекстные менеджеры тоже примеры есть.
    И исключения в таком стиле обрабатывать удобнее. Проверено.

    Безусловно, Logger.log прямо так брать и списывать не стоит, он тоже полезный и им тоже важно пользоваться. Но не для трассировки.
  • Как работают с git diff-ами 3d-ассетов в GameDev?

    Вадим Ремин, это смотря как представлена сцена и какие возможности по совместному редактированию есть у инструментов.
    Например, для Wakfu Online был сделан специальный редактор для совместного заполнения локации. При этом, локальные редакторы у дизайнеров являются простыми сетевыми клиентами к БД локаций. И этот инструмент действительно работает.
    В моем личном опыте есть реализация сцены в виде построчного json. Каждый элемент - одна строчка. Формат - текстовый. Конфликты, слияния и диффы делаются на ура. Проблем тоже нет, кроме проблемы расползания строчек по вертикали и общего размера файла.
    А с бинарными форматами все однозначно: пока один сотрудник его не положил на место, второй его взять не может.
  • Как исправить ошибку в qt?

    Владислав Молчанов , прошу обратить внимание на П3.1 и П3.8 правил.
    Тегов слишком много и они слабо связаны с сутью твоей проблемы, это похоже на тег-спам. Текст необходимо оформить в блоке <code>.
  • Восходящее преобразование массива производного класса к родительскому?

    @MarkusD Куратор тега C++
    BobJonstone, Mercury13, не стоит в этом месте использовать reinterpret_cast. Это выстрел себе в ногу.
    reinterpret_castработает очень коварно:
    Unlike static_cast, but like const_cast, the reinterpret_cast expression does not compile to any CPU instructions... It is purely a compile-time directive which instructs the compiler to treat expression as if it had the type new_type.


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

    @MarkusD Куратор тега C++
    Насколько это правильно?

    Зависит от того, какую задачу ты решаешь.
    Я скажу - все это неправильно. Самая частая ошибка человека в том, что он описывает не саму проблему, а то, как он эту неописанную проблему хочет решать.
    Я пока еще не понимаю что ты хочешь сделать, сейчас еще рано говорить о том, как ты хочешь это сделать.
  • I want to find the time it will take to sort through an insertion sort in c++?

    @MarkusD Куратор тега C++
    Miltonc, прошу обратить внимание на пункт 3.6 в правилах.
    Пользователь обязан соблюдать нормы и правила Русского языка. Это относится и к кривым автоматизированным переводам.
  • Как передавать много сообщений через Socket?

    @MarkusD Куратор тега C++
    maaGames, значит TCP, стримминговый протокол. Тогда в буфере приема у тебя и правда сколько фрагментов сообщений накапало на момент сигнала от poll, сколько ты и вычитаешь из сокета в промежуточный буфер. TCP оперирует фрагментами малого размера, которые он получает из записанных в сокет данных. При этом TCP считает что ты пишешь потоком и хочешь читать все доставленные в сокет фрагменты как поток данных.

    Для чтения из TCP сокета обычно используют циклический буфер. Я у тебя про него немного выше спрашивал.
    Общая концепция такова, что ты в циклический буфер читаешь до момента завершения вычитки всего сообщения, дальше это сообщение уже отдается на разбор, а все, что было вычитано из сокета сверх тела текущего сообщения, остается в буфере и ждет следующей сессии по вычитке из сокета. Размер циклического буфера при этом желательно иметь намного больше чем размер самого большого сообщения, чтобы не останавливать операцию чтения и не блокировать чтение операцией разбора сообщения.
  • Как передавать много сообщений через Socket?

    @MarkusD Куратор тега C++
    maaGames, ясно. Тут и правда уже без кода не разобраться. :)
    У тебя эти сокеты, кстати, какой сетевой протокол используют?
  • Как передавать много сообщений через Socket?

    @MarkusD Куратор тега C++
    maaGames, да, сокеты там блокируемые по умолчанию. Это значит, что пока данные не выйдут за пределы локального железа, функция записи в сокет не передаст тебе управление исполнением. За атомарность многопоточных операций я ручаться не могу.

    Я, пожалуй, двусмысленно выразился про блокируемость. Я имею в виду вот какой момент. Ты ведь сообщение пишешь участками, по одному полю данных. SocketOutputStream не собирает твои данные в единый бинарный буфер, а сразу пишет их в сокет. Это дает волю кому угодно вклиниться из другого потока в этот сокет между операциями записи в твоем текущем потоке. Т.е. транзакция записи сообщения может быть легко нарушена.
    flush при этом - это барьер синхронизации между исполнением твоего кода и очисткой конвейера операций устройства (в самом устройстве). В случае блокируемых сокетов flush - фиктивная штука.

    Попробуй, как минимум для проверки, писать сообщения в TLS буффер по одному, а далее передавать уже этот TLS буффер в SocketOutputStream. Т.е. передавай на запись в сокет не сообщение, а буфер, куда сообщение сериализовано.

    зы
    Я не заметил первое твое сообщение. Понимаешь, то, что ты видишь в буфере приема явно говорит о состоянии гонки на стороне отправки. У тебя сообщения телами пересекаются в буфере. Новый magic number в буфере приема не появляется потому что он был записан раньше чем продолжилась запись предыдущего пакета.
  • Как передавать много сообщений через Socket?

    @MarkusD Куратор тега C++
    Коротко, у тебя тут на лицо race condition. В одно и то же горло лить пытаются сразу несколько источников. Горло - это сокет. Источники - это SocketOutputStream. Они не выстраиваются в очередь и не ждут завершения транзакции записи пакета.
    Пакет в сокет надо писать сразу и весь, одним вызовом функции записи. Или блокировать сокет на период записи пакета от прочих попыток записи.

    Если хочешь, могу всё описать конкретнее в рамках ответа.

    К слову, сообщения в несколько мегабайт - это много. У тебя циклический буфер на сколько поставлен? Он не лопнет мегабайтами вычитывать? Ты DoS по оперативной памяти на сервере не боишься?
  • Как сделать конкатенацию в функции system()?

    D9koder, все дело в том, что сам вопрос у тебя сводится к ознакомлению с документацией. :)
    Тебе стоит изучить заголовок string.h из стандартной библиотеки C.
    Язык C максимально прост в этом месте. Тебе требуется самостоятельно осуществить все операции по склейке строк.
  • Как сделать конкатенацию в функции system()?

    D9koder, тебе все-таки стоит вставить код текстом, в теге <code>, чтобы люди понимали твой вопрос могли на него ответить. :)
  • Vector в классе?

    @MarkusD Куратор тега C++
    Данил, ты все еще никак не ответил на мои вопросы.
    Даже в примере WinPooh32 происходит инициализация вектора. Важно понимать, что именно ты хочешь получить от std::vector<int>{10}: вектор с одним элементом или с десятью?

    Если у тебя имеются ошибки компиляции, тебе стоит первыми выписать именно их. Желательно весть твой код оформить так, чтобы в комментариях к строчкам было видно, какие у тебя на этих строчках ошибки.

    Пункт 3.8 правил Тостера запрещает использовать изображения для демонстрации кода. Используй тег <code> для демонстрации своего кода.
  • Как сделать конкатенацию в функции system()?

    D9koder , прошу обратить внимание на правила Тостера, в особенности на пункты 3.8 и 3.1.
    Код необходимо указывать в теге <code>, скриншты с кодом никому не нужны.
    Теги стоит указывать только максимально конкретизирующие твой вопрос. Тебе незачем писать язык в вопросе, когда для этого языка заведен отдельный тег.
  • Vector в классе?

    @MarkusD Куратор тега C++
    Данил, я готов поспорить что не C++14 точно.
    Рекомендую дать ответы на все мои вопросы.
  • Vector в классе?

    @MarkusD Куратор тега C++
    Данил, видимо, потому что ты собираешь код в стандарте C++03 или более раннем.
    Что означает "работает просто vector arr(10)"? Работать код может самым различным способом, даже неправильным. Чтобы понять тебя, от тебя нужны детали и пояснения твоей терминологии.
  • Vector в классе?

    @MarkusD Куратор тега C++
    Данил , твой вопрос требует конкретизации.
    Какого поведения ты ожидаешь от конструкции vector<int> arr(10)?
    Какой стандарт C++ ты используешь для сборки этого кода?
    Сколько элементов ты хочешь видеть в векторе после конструирования экземпляра Stack?