Сергей Горностаев, Теоретически мьютекс можно разместить в shared memory. Тогда им могут пользоваться и разные процессы. Никогда так не делал, но почему бы и нет. Единственое надо определится какой процесс должен инициализировать мьтекс.
На эту задачу хорошо ляжет read-write mutex. Вызов foo - блокирует read, bar - write.
Так же можно что-то замутить и с помощью atomic в shared memory, но там придется решать проблему с возможным нежелательным активным ожиданием.
Artemka1903, Эта информация легко модифицируется, смотри git remote --help
Никто не запрещает один локальный репозиторий подключить к нескольким удаленным репозиториям.
Так же после git clone вы можете просто удалить каталог .git (после этого каталог с проектом перестанет быть локальным гит репозиторием, вся информация о коммитах, ветках и т.п. будет потеряна) и инициализировать новый локальный репозиторий, который потом зальете на другой удаленный репозиторий.
Вообще в интернете всегда так - стоит выставить какой-либо сервис в интернет, тут же набегут какие-то боты, которые начнут пробовать сломать ваш сервис.
Смысл очень простой - найдут уязвимость, зальют свой код и будут использовать ваш сервер в каких-то своих "темных делишках", вы даже можете это не сразу обнаружить.
"срабатывание точки останова" - это же не ошибка. Видимо надо убрать точку останова. Или просто запускать не в отладочном режиме.
Зачем вам посимвольная чтение/запись? Пишите/читайте сразу всю структуру с помощью fwrite/fread. Это и проще и быстрее.
Хочу напомнить, что любая операция с файлами может завершиться с ошибкой, по не зависящим от программы причинам. Так что в обязательном порядке нужно проверять возвращаемые функциями работы с файлами значение. Пожалуй, только возвращаемое значение fclose() можно игнорировать.
dmshar, Ну явно же - переход от 3 к 105
Возможно, это определит лишь область для более детального анализа.
Для дальнейшего анализа можно, например, от 105 проверить когда разность изменит знак, так выйдем на 107, это и будет окончательным пиком.
Ваш вариант, кстати, выявит все локальные максимумы (сглаженные размером окна), включая "ярко выраженные пики", а так же и не ярко выраженные.
Страуструп сложен, подойдет для тех кто уже в теме, но хочет поглубже нырнуть.
Прата подойдет. Лафоре из той же оперы.
После этого нужно что-то по глубже, по современным стандартам, по параллельному программированию и т.п.:
Скотт Мейерс "Эффективный и современный С++", это та где про 42 рекомендации
Энтони Уильяис "Параллельное программирование на С++ в действии"
...
Вообще провайдеры не гарантируют, что у вас будет заявленная скорость на ВЕСЬ интернет. Они могут обеспечить эту скорость только на "последней мили", т.е. от вас и до своего оборудования, а дальше - как получится.
Применительно к вашей проблеме - показателен опыт с принудительным ограничением скорости на сетевом адаптере. В связи с этим предполагаю, что это может быть глюк в GoogleDriveFS. Я не пользуюсь этим софтом, посмотрите, возможно где-то в настройках есть ограничения пропускной способности.
Похоже, если функция действительно вызывается в разных потоках, то она может долго ждать в этом цикле пока в timer снова появится значение oldTime.
Вообще, не понятно, если вы сохраняете предыдущее значение в локальную память потока, то зачем вам этот atomic нужен?
Иван Волков, Думаю, что ошибаетесь.
Компилятор может сделать какие-то мелкие оптимизирующие замены на уровне ассемблерного кода, не влияющие, по его мнению, на логику кода. Но заменить вызов функции на вызов другой функции - это было бы уже перебор.
Думаю, нет смысла отказываться от буферизации ради асинхронных операций. Тем более для последовательного чтения, где буферизация дает наибольший выигрыш в производительности.
В любом случае асинхронная операция может завершиться синхронно даже если вы выполнили все условия для того, что бы операция выполнялась асинхронно.
Кстати, наверное поэтому, в некоторых асинхронных библиотеках ввода/вывода асинхронность для файловых операций достигается за счет распараллеливания операций, а не за счет использования OVERLAPPED. По моему, такой подход используют в libuv.
Кирилл Гусарев, Кстати, если первый запуск с админскими правами был, то конкретные файлы, на которых спотыкается запуск, должны быть указаны в тексте ошибки.
Кирилл Гусарев, Когда QtCreator уже установлен, он должен работать без админских прав. Но ему требуются права на запись в каталоги где он лежит. Он там может создавать какие-то свои конфиги и временные файлы.
Так же, возможно, что если QtCreator уже был запущен из-под админа, то некоторые файлы в каталоге установки были созданы с админскими правами и пользователи не могут получить к ним доступа.
Просто дайте пользователям права на каталог c:\Qt и на все файлы внутри.
Удачи!