Задать вопрос
  • Как исправить некорректное отображение кириллицы?

    @res2001
    Василий Банников,
    Честно скажу, что я хз какой бест практис для C++ на винде

    Я то же не в курсе. Похоже, каждый решает для себя сам этот вопрос.

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

    @res2001
    С моей точки зрения, самым правильным вариантом будет последний.

    Этот вариант хорош, только если вы пишите "хело ворд" или какую-нибудь лабу в универе, чтоб показать один раз.

    С моей точки зрения правильные варианты 2 или 3. Например, посмотрите на большинство консольных утилит, которые поставляются вместе с виндой из коробки - они нормально выводят русские буквы не зависимо от текущей кодировки консоли.
    Сам лично, в бытность свою сетевым админом, не однократно вспоминал "добрым" словом создателей консольных утилит, которые принудительно меняли кодировку из программы. Часто консольные утилиты используют из командных сценариев, где обычно кодировку выставляют в самом начале, и если утилита ее сменит, то придется это специально обходить в коде сценария, что не удобно. А представьте, что сценарий большой (это не редкость) и внутри используется несколько разных утилит и каждая из них норовит сменить кодировку на свою - бороться с этим довольно трудно.

    Кодировка консоли винды легко меняется на лету командой chcp, и русских кодировок в винде из коробки минимум 3 (866, 1251, UTF8), причем по умолчанию используется 866 (а вовсе не 1251).
    К слову, проверять правильность отображения кирилических символов в консоли VSCode (как и в любой другой IDE) не стоит, т.к. сами IDE обычно настраивают кодировку в собственной консоли так как им удобно. В консоли cmd.exe кодировка вероятно будет другой.
    Написано
  • Как добавить библиотеки в CMakeLists?

    @res2001
    Для подключения библиотек обычно пользуюсь pkg_check_modules(). find_package() использую, как правило, только для чего-то типа Threads.
    До использования pkg_check_modules() его надо подключить с помощью:
    find_package(PkgConfig REQUIRED)

    pkg_check_modules() для поиска использует утилиту pkg-config, которую можно установить в любой дистрибутив. pkg-config использует для поиска файлы описания библиотеки (*,pc, файлы обычно лежат в /usr/lib/pkgconfig и/или /usr/lib/x86_64-linux-gnu/pkgconfig). Файлы описания обычно готовят сами создатели библиотек и поставляются они вместе с пакетом dev библиотеки, поэтому файлы описания обычно одинаковы для всех дистрибутивов и подобной проблемы тут просто не существует. Имя модуля, указываемое при вызове pkg_check_modules() - это имя *.pc файла.

    Саму утилиту можно вызвать из командной строки вручную, посмотреть на параметры, что возвращает и т.п. Еще можно встретить makefile, где внутри используется pkg-config.

    Конечно, если в библиотеке нет pc файла, то этот вариант не сработает. Но в вашем случае pc вроде бы должен быть.

    Для справки смотри: https://cmake.org/cmake/help/v3.25/module/FindPkgC...
    Написано
  • Что это такое, почему оно вылезло?

    @res2001
    Единорог Безрогов, Это все не важно.
    Важен результат - у вас на компе что-то происходит и вы об этом не имеете никакого понятия.
    Нужно это понятие поиметь, для этого надо произвести некоторые разыскные мероприятия. В конце концов - удалите TAP драйвер, он обычно удаляется стандартными средствами, и то ПО, которому он нужен должно перестать работать и может начнет проявляться какими-нибудь ошибками.
    Ютубу и видео плеерам TAP драйвер без надобности.

    Обычно TAP драйвер используется каким-то софтом, который хочет перехватывать трафик и что-то с ним делать.
    Например - OpenVPN перехватывает трафик предназначенный для передачи по ВПН с помощью TAP драйвера, шифрует его и передает в физический сетевой адаптер. Вместо шифрование другое ПО может делать что-то свое.
    Написано
  • Что это такое, почему оно вылезло?

    @res2001
    Видимо на комп было установлено ранее какое-то ПО, у которого в зависимостях TAP драйвер. Он довольно много где используется. Например в OpenVPN. После перезагрузки компа, возможно, просто продолжается его установка.
    Но почему вы об этом не знаете? Вот вопрос.

    Если в последние несколько дней вы не устанавливали на комп ничего, то стоит посмотреть, не появились ли какие-то новые процессы в системе, нет ли повышенной активности (загрузки ЦПУ/сети/диска). Возможно подхватили какого-то зверя, ведь защитника у вас нет :) - стоит проверить комп на вирусы.

    Сам по себе TAP драйвер не является вирусом или опасным ПО, но тот кому он потребовался вполне может быть им.
    Написано
  • Можно ли в Windows 10 без виртуальной машины сделать так, чтобы OpenVPN подключение распространялось бы только на конкретные программы?

    @res2001
    Если ваша определенная программа ходит на определенные адреса в интернете (и желательно, чтоб эти адреса не менялись со временем), то можно через таблицу маршрутизации завернуть конкретно эти адреса в ВПН, добавив необходимые маршруты. И все, не надо никаких дополнительных программ вообще.
    Тут конечно могут быть нюансы, не позволяющие применить такой подход, но в общем будет работать.
    Правда ходить по этим адресам через ВПН будет не только эта программа, но и другие, которым может быть то же понадобятся эти же адреса.
    Написано
  • Как из /128 адреса ipv6 самому себе присвоить /64 или даже /48?

    @res2001
    Quqas, 128 маска - это минимально возможная маска для IPv6, это P2P грубо говоря и в этой сети только 1 хост.
    Левые (придуманные) адреса не будут правильно маршрутизироваться в интернете, а следовательно не приведут к твоей сети через твоего провайдера.
    Соответственно вариантов не много:
    1. внутри сети использовать любой диапазон локальных IPv6 адресов и через NAT выводить их наружу. NAT будет заменять локальные адреса, на единственный внешний адрес.
    2. договориться с оператором: арендовать IPv6 подсеть и уже в рамках этой подсети назначать адреса хостам в своей локальной сети. Тогда можно обойтись без NAT, но это скорее всего за деньги.

    В целом все примерно так же как в IPv4. Видимо оператор тебе выдает только 1 адрес потому что это ВПН и
    это побочно и недокументированно
    .
    Написано
  • Какую библиотеку для excel c++ посоветуете?

    @res2001
    Василий Банников, Про установленный офис я писал, винда - вытекает из установленного офиса.
    На счет медленно - вопрос спорный, я не замерял. Лично я использовал для каких-то мелких задач лет 15 назад и не на С++, вполне хватало скорости. Как оно сейчас работает не в курсе, вряд ли медленнее стало.
    mingw в данном случае не помеха, т.к. интерфейс к COM объектам предоставляет ОС и он не зависит от используемого компилятора.

    В целом я не настаиваю. Просто предложил альтернативный вариант, доступный из коробки (зависимость от офиса в данном случае не считаю проблемой, т.к. ТСу нужно работать с xls файлами, а значит офис и винда у него точно есть). Все недостатки тут уже хорошо описали. Выбор за ТС.
    Написано
  • Какую библиотеку для excel c++ посоветуете?

    @res2001
    Adamos, В целом согласен, но если надо быстро закрыть какую-то задачу, то почему бы и нет.
    К тому же я не предлагал изучать технологию, пользоваться этим достаточно просто. Писать свои объекты - это совсем другое и сейчас не нужно этого делать.
    Написано
  • Какую библиотеку для excel c++ посоветуете?

    @res2001
    MS Excel/Word (и наверное и другие продукты из состава MS Office) предоставляют ActiveX объекты, которые могут быть использованы напрямую без всяких библиотек, любыми языками умеющими в ActiveX. А С++ это умеет, потому что собственно винда умеет и предоставляет соответствующие интерфейсы.
    Так что можете покопать в этом направлении.
    Для затравки можно, например, попробовать написать что-нибудь легкое с использованием Excel ActiceX объектов на скриптовых языках VBS или JS (интерпретатор есть в винде из коробки - cscript/wscript), для понимания как с ним вообще работать, потом это можно будет адаптировать на С++, если останется желание. Просто в VBS/JS работать с ActiveX объектами очень просто, в С++ будет немного сложнее.
    Этот подход, естественно, требует установленного Excel на компе.
    Технология ActiveX уже старая и подзабытая, нынче не особо модная, но это не значит, что она не работает.
    Написано
  • Чем вы пользуетесь для бекапа личных машин?

    @res2001
    Простейший батник с вызовом robocopy/xcopy внутри.
    Чтоб каждый раз не тянуть весь объем, используйте копирование с учетом атрибута "архивный" - когда файл изменяется атрибут автоматически устанавливается и xcopy/robocopy скопируют файл и сбросят атрибут (если используются соответствующие опции).
    Так же можно копируемые файлы предварительно архивировать, тот же 7z, по моему, умеет работать с атрибутом "архивный".
    Написано
  • Почему запуск процесса через CreateProcess() может очень медленно выполняться?

    @res2001
    1. Какой размер исполняемого файла запускаемого процесса? Если большой, то при загрузке могут быть тормоза. Но по идее повторный запуск уже должен быть быстрее (если файл влазит в кэш ОС)
    2. Как замеряли время? Конкретно время выполнения CreateProcess() или всего приложения?
    3. Предполагаю, что висит у вас на выполнении WaitForSingleObject() - это единственное место, где в коде происходит ожидание. Попробуйте тут поэкспериментировать, напримре, вместо INFINIT задать какое-то мелкое время или вообще не ждать.
    Похоже в коде на go, не происходит ожидание завершения дочернего процесса.
    Написано
  • В школьном вай фае заблокирован порт 9. Как обойти блокировку?

    @res2001
    azim218,
    Как я понял заблокированы все порты кроме 443

    Общий ответ: иди к админу договариваться.
    UDP/9 порт - это видимо Wake-On-LAN. Формально это, конечно discard, но на практике WOL его использует.

    Если хост получатель внутри сети - к админу.
    Если хост получатель в интернете - могут быть варианты с промежуточным ВПНом по 443 порту и через него выход на хост получатель по 9 порту.
    Написано
  • Почему я могу изменять состояние объекта хранящийся в const std::unique_ptr и const std::shared_ptr?

    @res2001
    maaGames,
    const int* p1 = ...; // константный указатель
    int* const p2 = ...; // указатель на константу

    Наоборот же.
    p1 - изменяемый указатель на константный объект,
    p2 - константный указатель на изменяемый объект

    p1 и p3 еще могут быть записаны так:
    int const * p1;
    int const * const p3;
    Написано
  • Можно ли использовать не парные Acquire/Release порядки памяти?

    @res2001
    jcmvbkbc,
    cppreference ничего не говорит про видимость, только про атомарность, т.е., что изменение происходит целиком или не происходит вообще.

    Интересная мысль :)
    В таком случае, ТС в 3 нужен ACQUIRE.

    Все таки вредно сидеть на х64, он слишком много прощает в плане использования атомарных операций.. Атомарные структуры видимо лучше отлаживать на ARM.

    Как всегда, с вами поучительно пообщаться. Спасибо!
    Написано
  • Можно ли использовать не парные Acquire/Release порядки памяти?

    @res2001
    jcmvbkbc,
    из чего это следует?

    https://en.cppreference.com/w/c/atomic/memory_orde...
    Объяснение к memory_order_relaxed
    Что здесь обозначено словом "синхронизировать"?

    Тем или иным способом сделать видимыми данные для других потоков после записи (и перед чтением). Барьеры acquire/release или seq_cst.
    Какие выводы можно сделать из такого теста, если он не показывает ощибок?

    Если ошибок нет, то, вероятно, очередь работает правильно. Гарантии, конечно, не дает, т.к. возможно ситуация при которой возникает ошибка не появилась в конкретном прогоне.
    Написано
  • Можно ли использовать не парные Acquire/Release порядки памяти?

    @res2001
    Eugene Usachev, relaxed обеспечивает только видимость изменений самой атомарной переменной в других потоках.

    В методе producer_maybe_push() нужно синхронизировать данные только после записи (new), это происходит в 4. Head и tail синхронизируются благодаря атомарным операциям. Следовательно в 3 можно использовать relaxed.

    Чтоб совсем все было понятно можно использовать relaxed везде для доступа к значениям head и tail. Но добавить "ручной" atomic_thread_fence перед чтением данных и после записи данных с соответствующим упорядочиванием acquire/release. Так вы отделите синхронизацию собственно данных от синхронизации head и tail и будет проще разобраться с тем, что происходит на каждом этапе.

    Сделайте тест и погоняйте его несколько часов с разным количеством узлов. В тесте предусмотрите проверку правильности операций - подсчитывайте количество pop/push операций, а так же считайте какие-нибудь суммы по данным и в конце теста сравнивайте количество и суммы для pop и push - они должны быть равны.
    Написано
  • Почему окружность получается отрисованной не ровно?

    @res2001
    Лесенка будет всегда при достаточном увеличении, но кое-что сделать можно:
    Использовать double для вычисления радиусов и косинусов/синусов.
    К float приводить (FPoint) только окончательно вычисленное значение, все промежуточные в double.
    Увеличить количество точек для отрисовки фигуры.
    Написано
  • Какой есть софт для общей папки (3-5 пользователей Windows в локалке)?

    @res2001
    Про пользователей уже написали. Разберитесь почему "периодически отваливается" и будет вам счастье.
    Вообще это самый надежный инструмент для локальной сети из всех тут приведенных. Им пользуются очень большие корпорации, сидящие на винде, там правда используют АД для авторизации, но сам протокол один и тот же.

    По отваливанию можете тут задать вопрос с приведением каких-то фактов, ошибок в журналах и т.п.

    Несколько советов, чтоб не отваливалось:
    1. Попробуйте подключать шару не по имени компьютера, а по IP адресу. IP адрес на компе, где расшарен диск должен быть статическим в этом случае.
    2. Если не поможет п.1. Возможно проблема в появлении в одноранговой сети двух master browser. По идее, должен быть только один комп с такой ролью (процедура выбора master browser запускается виндой автоматически и незаметна для пользователя), но в одноранговой сети микрософт бывают подобные флюктуации. Проблема давно известная. Присвоение роли master browser можно настроить руками, об этом есть статьи в интернете.
    Написано