Задать вопрос
  • Что в CMAKE я должен считать библиотекой?

    @res2001
    Rag’n’ Code Man, Нет, в include по любому нужно указывать файл заголовка. Даже когда библиотека ставится из пакетов, то вместе с ней ставятся и ее заголовки.
  • Bat файл работает через раз как исправить?

    @res2001
    AkaMaloy,
    У activate нет расширения.

    Вообще, на сколько помню, в виртуальном окружении должен быть файл activate.bat или ps1: https://docs.python.org/3/library/venv.html
    Если файл без расширения, то возможно это шелл скрипт для линукса, который наверняка нельзя выполнить в винде. Посмотрите по содержимому.
    Вообще в винде командные файлы обязаны иметь расширение (bat или cmd), иначе их не возможно запустить. Тут вам не линукс.
  • Как переопределить операторы != и == в с++ для структуры?

    @res2001
    Юрий, Если уж все таки решите реализовывать операторы сравнения, то научитесь сравнивать Си строки - используйте strcmp() или в вашем случае wcscmp().
    Ваш текущий вариант сравнивает указатели на строки, это не одно и то же.
  • Как правильно использовать указатель?

    @res2001
    pshevnin, Нет. Так вы просто затрете локальный указатель out_edge и после выхода из функции потеряете его. Делайте как я писал - передаете двойной указатель и присваивание через разъименование.

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

    @res2001
    Что в чем находится? Переформулируйте вопрос.
  • Как с помощью рекурсии найти минимальный элемент массива?

    @res2001
    В вашем коде нет реализации рекурсивной функции :-) Это задание?

    Зачем рекурсия в этой задаче?
    Как правило, рекурсия хороша только для обучения. На рекурсии бывает легче объяснить реализацию некоторых алгоритмов.
    В реальности рекурсия проигрывает итерационному методу (циклу) как по скорости, так и по затрачиваемым ресурсам.
    В вашем случае - если массив будет слишком большим, то будет переполнение стека из-за рекурсии.
  • EventLoop, потоки и блокировки, как правильно блокировать?

    @res2001
    syxme,
    Я что-то сделал и всё заработало

    Хорошо бы с этим разобраться, если ошибка не исправлена, то она вылезет снова в другой ситуации и, возможно, ее будет сложнее диагностировать.

    Ошибся в ответе немного: get возвращает указатель, а не ссылку, но это ни как не влияет на смысл ответа.

    Кстати, в MessageQueue метод empty не имеет смысла, т.к.:
    1. там у вас ошибка - вы не захватываете мьютекс, но другой поток может модифицировать очередь пока выполняется pool.empy(), в итоге не понятно что вернется
    2. Т.к. очередь претендует на потокобезопасность, то подразумевается что с ней работает несколько потоков. Когда один из потоков получил результат empty() (даже в том случае когда empty будет реализована правильно), он может быть вытеснен другим потоком, который модифицирует очередь (добавит элемент или удалит последний элемент) и результат empty() будет не правильным в предыдущем потоке.

    Поэтому empty надо убрать из публичного интерфейса. Вместо этого в методах модифицирующих очередь проверять состояние, когда мьютекс уже будет захвачен.
  • Почему разрывает соединение, при смене типа?

    @res2001
    Илья, Конструктор по умолчанию вообще не имеет смысла, я бы его запретил.
    В конструктор где приниматеся fd может быть передан блокирующий сокет, тогда как в другом конструкторе ты создаешь не блокирующий сокет. А в остальных членах класса поведение типичное для блокирующего сокета.

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

    @res2001
    recv возвращает массив байт, а не строку. Там может не быть нулевого завершающего символа. Он там будет только если вы его отправляете, что далеко не факт, т.к. код отправки вы не выложили. Что будет выведено на экран, если прочтенная информация не завершается нулевым символом?

    recv не обязана возвращать сразу всю строку, вы можете ее получать частями, в этом случае нулевой байт (если вы его все таки отправляете) будет только в последнем чтении.

    Вообще не плохо бы показать и код клиента, т.к. возможно вы отправляете что-то не то.
  • Почему разрывает соединение, при смене типа?

    @res2001
    Илья,
    Нашел где висит.

    Получается висит на вызове kevent?
    Или все таки kevent возвращает значение? Может там -1 и в цикл просто не входит? Хорошо бы проанализировать ошибку - это всегда полезно делать, во избежании подобных не поняток.
    Вообще тип tEvent[i].ident uintptr_t, а вовсе не int. Компилятор не ругается на подобные преобразования? Я бы ругался :-) В 64 битных системах указатель в 2 раза больше по размеру, чем int. Вы бы для интереса вывели значение ident и сравнили его со значением newSock.
    У вас выставлен флаг EV_ONESHOT, на сколько я понимаю, после первого срабатывания дескриптор удаляется из очереди с этим флагом.

    Ни когда не использовал kevent, просто то что в глаза бросилось.
  • Как вытащить значение из под указателя на начало строки?

    @res2001
    pshevnin,
    Когда я использую atoi(), strtok перестаёт корректно работать

    atoi не модифицирует строку, так что ничего ломаться не должно. Видимо проблема в вашем коде.
    А вообще strtok разбивает одну большую строку на несколько маленьких, заменяя разделители нулями.
  • Где найти информацию по конфигурации uboot?

    @res2001
    danilus, Про "перенос файлов" вам тут uboot не поможет - это надо смотреть TRM по вашему процессору, т.к. начальный загрузочный код зашит в чип (это у ARMов, у других может быть по другому). Те процы, с которыми я сталкивался умели загружаться с активного FAT раздела на SATA или SD, хотя и RAW вариант то же был.
    Я доходил только до создания модифицированной версии конфига и своего варианта dts.
    Если архитектура сильно отличается от имеющихся вариантов, то может понадобится дописывать код. Но я думаю, что этим занимаются в основном производители процов, а кастомные платы обычно опираются на то что дают производители.
  • Почему массивы в Си заполняются "М"?

    @res2001
    Antony,
    дебагер в Visual Studio намеренно заполняет неинициализированную память подобным "странным" мусором

    Вполне вероятно, только это, видимо, делает не дебагер, а компилятор. Вероятно, что в release сборке этого уже не будет.
    Возможно это делается в рамках диагностики выхода за пределы массива и т.п. штук, в этом случае, так же возможны какие-то предопределенные значения до и после массива.

    h45h47, Для проверки смотрите память массива не дебагером, а сделайте вывод printfом и соберите релизную версию.
  • Почему массивы в Си заполняются "М"?

    @res2001
    h45h47,
    Это и интересно узнать, потому что на разных компьютерах результат повторяется.

    Я не могу это подтвердить. На собственной практике видел абсолютно разные варианты.

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

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

    @res2001
    danilus, "универсальные ядра" собираются из тех же исходников, что и не универсальные. Так что, если дистрибутив поддерживает архитектуру вашего проца теоретически можно его использовать.
    Но никто вам не мешает собрать собственное ядро.
    Как-то находил рецепт как установить Arch Linux на отладочную плату от TI с использованием uboot. Хотя тот же TI поддерживает собственный дистрибутив для своих плат и у них есть подробная инструкция как собрать uboot и ядро. В целом рецепт по Archу был короткой выжимкой из инструкции от TI.
  • Как убрать зависания на сервере с помощью select?

    @res2001
    Илья, Все таки, что там у вас вместо базы данных? Что-то самописное?
    Судя по коду приема соединений читающий сокет у вас не блокирующий. Но остальные, видимо, блокирующие.
    Использовать select с блокирующими сокетами смысла нет, т.к. операции чтения/записи все равно будут блокирующими.
    Если вы хотите работать в одном потоке с пачкой сокетов, вам надо все сокеты переводить в неблокирующий режим, со всеми вытекающими из этого последствиями. Если сокеты будут в блокирующем режиме, то поток будет всегда ждать завершения любой операции чтения/записи на любом сокете.

    И как часто бывает, у вас нет обработки ошибок. Любая операция с сокетами может завершиться ошибкой.
  • Ubuntu как вторая операционная система?

    @res2001
    Ubuntu нормально работает с NTFS разделами. А вот Вин10 с ext4 не дружит.
    Для Вин7 были рабочие драйвера для ext4, использовал в свое время. Но под Вин10 они уже не работают.
    Платные варианты, конечно есть.