Савва Насыров, деструктор теперь правильный!
static переменные надо в срр файл добавить. В хэдере только их объявления в классе. Инициализацию (вне класса) надо в срр файл перенести.
Савва Насыров, Код классов не пишется в заголовке. Это ты так написал. В хэдере нужно писать определение класса, а реализацию в срр файле. То есть в хэдере только объявление функций должно быть.
pluspwnz, И тебе спасибо за приятные слова :)
Но у этого решения есть минусы. Некотоыре античиты считают любые макросы читерскими программами и может из игры выкинуть. Перед запуском стимовских игрушек может потребоваться или выключать макросы или вообще закрывать программу. Это если будут проблемы с античитом.
Хочешь - поднимай, не хочешь - не поднимай. Вот коммиты лучше для каждой фичи делать отдельно, а не пачкой.
По идее, каждый релиз дистрибутива лучше делать с разной версией, чтобы пользователи могли понять, что нужно обновиться.
Очень подозреваю, что инициализация строк пытается выполниться до инициализации рантайм библиотек, поэтому строки не отрабатывают. Если сделаешь их членами класса Info (не статическими) и инициализируешь в get_instance, аналогично объекту Core, то 100% проблем не будет, потому что не будет уже никаких зависимостей ни от чего. Заодно уберёшь глобальные переменные - сплошные плюсы!
Могу ошибаться, но порядок инициализации глобальных статических переменных не определён. То есть строки могут создасться до VER_MAJOR.
в остальном вроде extern правильно используется и должно бы работать.
VPN нужен общесистемный, не для браузера. Сперва надо скачать инсталлятор, а потом инсталлятор будет выкачивать выбранные компоненты и он тоже IP проверяет. Для обновления тоже нужен будет VPN. Для программирования Qt и запуска приложений VPN не нужен, там уже нигде не проверяется. Только при скачивании, установке и обновлении через Maintanance Tool.
Раньше можно было скачать оффлайн инсталлятор, может на торентах кто-нибудь добрый выложил, если и сейчас есть такое. Там уже VPN не нужен будет.
Купи (скачай) любой учебник по С++ для студентов. Там в конце каждог ораздела есть вопросы и задачи для самопроверки. Если не можешь их решить, то знаний очень недостаточно.
sfml скачать с оффициальног осайта. Гуглить по слову sfml.
Qt из России и Беларуси сейчас скачать невозможно, нужен VPN. Если ты не в России, то без проблем с официального сайта скачаешь. Гуглить по слову Qt.
Судя по "ИЛИ" между Qt и SFML, вы не определились, зачем оно вам нужно и что собрались делать...
Павел Дорофеев, Ну вопрос не в исходникак и не в отладчике. Через QAbstractEventDispatcher::installNativeEventFilter можно сделать, но это корявое платформо-зависимое решение. Интересует родное Qt решение, без привязки к платформе или каких-то полу-хакерских трюков.
Acaunt, Хуже :)
Исходный вариант хороший, но только если держать в уме, что лучше так не делать, если не уверен.
Любые статические объекты создаются в неизветсном программисту порядке, установленном компилятором. А вот при испоьзовании Синглтона, объект создаётся при первом вызове instance. Плюс можно контроллировать время жизни и "оживлять" объект даже после вызова деструктора, если понадобится.
Acaunt, Лучще не делать глобальных переменных без использования синглтона. Неизвестно, в каком порядке они будут созданы и удалены (зависит от порядка сборки).
И реализация внутри класса не всегда хорошо - это равнозначно объявлению inline.
std::cout реализованы ещё более "неприятным" способом с созданием кучи статических переменных, но там код очень хитрый.
floppa322, cache line разного размера всё же бывает. Если Entry больше размера cache line, то можно особо и не париться. Например, если это 64 байта, то из чего вообще Entry состоит, чтобы не только указатель на дочерний(дочерние) элементы хранить, но ещё и полезные даные были?
Возможно, я думаю не про то, но под выравниванием данных часто подразумевают выравнивание на 16 байт, чтобы всякие sse/avx инструкции смогли работать. Ну или на 4 байта для int, например.
floppa322,
Где в вопросе упоминание хотя бы архитектуры процессора, на котором будет работать? А какие данные в массиве? Entry размером намного меньше cache_line_size, что у тебя куча детей в неё умещается?
floppapa, Думаю, таких статических анализаторов не существует. std::atomic это очень частный случай использования всего одной единственной элементарной переменной. Даже две переменых через atomic уже не синхронизировать друг с другом. Анализатор, наверное, может тебе показать участок кода, к которому может быть обращение из разных потоков, но где ты, возможно, забыл сделать синхронизацию.
Если разрабатываешь программу с учётом race condition, то тебе не нужно ничего знать про модель памяти и прочие низкоуровневые дела, оставайся на уровне абстракции мьютексов и критических секций.
floppapa, Или не понимаю или не вижу смысла в вопросе. Если боишься, что будет race-condition - используешь объекты синхронизации.
Алгоритмов обхода нет, есть code coverage tool, которые проверяют, что каждая строчка кода была хоть раз выполнена. Для этого нужны горы тестов с разными входными данными. Если какие-то строки не выполнялись, то нужно написать дополнительные тесты, чтобы они покрыли этот участок кода... Но к race condition это отношения не имеет. Ведь один и тот же участок кода с одними и теми же данными может, в многопточной среде, выдавать разные результаты при неаккуратном обращении.
Не утверждаю, но лично я не верю, что можно написать комплексную многопоточную программу вообще без race condition, а значит, от объектов синхронизации не избавиться.
Evgenii, Я про это и пишу. В CameraRaw параметры задал, нажимаешь "открыть" и в фотошопе открывается уже другой файл. А исходный Raw остаётся без изменений, плюс появляется файл с теми настройками, которые в CameraRaw задавались. Если не открывать в фотошопе, то останется только Raw и файл с коррекциями.
Но вот после открытия в фото для редактирования и прочего, обратно в CameraRaw его же нельзя открыть. Только закрыть и по новой импортровать.
romaro, Не уверен. Никогда не проверял, можно ли raw фильтры использовать после того, как импортировал файл в фотошоп. Вроде после применения фильтров и нажатия "открыть" картинка в фотошопе создаётся независимая от raw файла и никак с ним не связана больше.
Если скрытый слой удалишь, файл в два раза меньше стать должен.
const CmdEventArgs CmdEventArgs::Empty = CmdEventArgs(CmdEventArgs::Nothing);