Добавьте к конструктору спецификатор excplicit или определите конструктор перемещения. А лучше и то и другое.
Вообще рекомендуют использовать в конструкторах excplicit всегда.
Для информации:
В линуксе unlink работает, конечно, на открытых файлах. Но файл будет реально удален, только после того как все процессы его открывшие освободят файл. Т.е. вы сделаете файлу unlink и будете считать, что все нормально, но процесс ранее открывший файл будет продолжать прекрасно с ним работать. Смотрите man unlink.
Илья, Не верно. Чтоб программа автозапустилась с администраторскими правами (а точнее от пользователя SYSTEM), вы должны добавить ключ в ветку HKLM реестра. А доступ к этой ветке требует администраторских прав.
В ветку реестра пользователя (HKCU) вы можете добавить ключ с правами этого пользователя, но тогда и программа запустится с правами этого пользователя, после того когда он войдет в систему.
Дополнительная нагрузка на диск может быть связана с недостатком ОЗУ - в этом случае активно используется файл подкачки. В вашем случае недостаток ОЗУ может быть как на хосте, так и в ВМ.
tasklist - выводит список процессо, taskkill убивает. Обе умеют работать удаленно.
Можно через wmic, он то же умеет удаленно и функционал есть. Гуглите.
Можно использовать psexec для удаленного выполнения чего-нибудь (или тот же wmic).
Ну и powershell то же умеет.
Никто не мешает указать спецификатор width в scanf для вводимой строки. И надо предусмотреть в массиве место под завершающий нулевой байт.
кто поумнее делают так
Пользователь с клавиатуры может вводить строку какой угодно длинны, ему до фанаря размер массива под вводимую строку, который предусмотрен в программе. Это вызовет выход за пределы массива и тот же SYGSEGV с вылетом программы. Так что это не многим лучше первого варианта. Выход все тот же - спецификатор width.
Оба совета годные, но они не достаточные - в любом случае надо при вводе контролировать размер вводимых данных. https://en.cppreference.com/w/c/io/fscanf
Обратите внимание - по ссылке extern C используется только с обычными функциями (не с типами, не с данными и не с членами классов).
extern C - заставляет компилятор не использовать плюсовый name mangling для указанных объектов. Вместо него используется сишный манглинг. Это вносит определенные ограничения на использование возможностей С++, например в этом случае не возможна перегрузка функций (т.к. она реализована за счет плюсового name mangling).
Т.к. в Си нет классов, а Си структуры - это совсем не С++ структуры, то классы и структуры С++ вообще нет смысла экспортировать, если планируется использование библиотеки в программах на Си. Экспортируйте только стандартные типы.
Почему важен сишный name mangling - потому что его поддерживает не только Си, но и куча других языков программирования, которые способны использовать динамические библиотеки. А плюсовый mangling используют только плюсы, на сколько я знаю.
Но вы же пишете библиотеки для себя. И, видимо, будете их использовать только в С++ программах. В этом случае можно вообще не использовать extern C. И тут у вас нет ограничений на экспорт структур и классов.
Spooky 2020, Может в шарпе просто берут значение таймера в тиках и берут от него остаток от деления на некоторое число. Вполне себе генератор. Довольно быстрый. Теоретически на многоядерных системах может выдать одинаковый результат, если одновременно выполнить генерацию на разных ядрах.
В Си используется обычно линейный конгруэнтный ГПСЧ. Константы в нем могут быть разные, но алгоритм один и тот же. Там всего несколько арифметических операций.
В плюсах несколько вариантов ГПСЧ, более сложных чем в Си.
Есть методы проверки результатов ГПСЧ на "случайность". Случайные числа могут быть не достаточно случайны для конкретного применения. Поэтому в стандартной библиотеке выбирают ГПСЧ, который и достаточно быстрый и дает достаточно не плохие результаты случайности для среднестатистического использования.
Maga Izdaga, Нет. Пул для клиентов с белыми IP адресами, можно такой заказать у прова за отдельные деньги.
Раз вы выходите в инет через NAT провайдера, то пров вам выдает адрес из диапазона серых адресов (можете нагуглить эти диапазоны). С серым адресом нельзя выходить в интеренет, только через NAT.
С НАТом все несколько проще - NAT находится где-то у провайдера и внешний адрес у него один, через него то вы и выходите в инет.
Другое дело, что серверов с NATом у провайдера может быть много. Но, видимо, для вас (вашего дома, улицы, района) у провайдера выделен конкретный NAT с фиксированным адресом. Провайдер может как-то чередовать NAT сервера в зависимости от нагрузки или расположения звезд, так что адрес NATа так же может меняться. Похоже ваш оператор такое не практикует.
Quark, Я не в курсе архитектуры вашей библиотеки. Из приведенных исходников трудно сделать каких-то выводов.
Когда вы создаете библиотеку, то у вас есть некоторые экспортируемые типы, данные и функции (методы), которые должны быть видны из вне (пользователям библиотеки). А так же есть другие типы, данные и функции, которые являются внутренними для библиотеки и их не надо показывать на ружу.
В связи с этим у вас должен быть заголовочный файл (или несколько файлов) для внешних пользователей (для программ, которые будут использовать библиотеку) и другие заголовочные файлы для внутреннего использования (они нужны только для сборки самой библиотеки).
Вы сами, как разработчик библиотеки, определяете, что надо экспортировать, а что не надо.
Во внешней программе, использующей библиотеку нужно подключать только файлы заголовков для экспорта, внутренние заголовки вообще не нужны внешней программе и они должны/могут быть не доступны во время сборки внешней программы.
Если библиотека не большая, то в принципе, может не быть внутренних типов и данных, тогда нет смысла во внутренних заголовочных файлах.
Еще несколько замечаний:
Использовать etxern C не логично для классов и структур С++, т.к. в Си нет классов и структуры там отличаются от структур в С++. Если вы хотите, что бы ваша библиотека могла использоваться в программах на Си, то нужно поступать несколько по другому. А плюсовые программы смогут использовать вашу библиотеку и без extern C.
Не зачем в классе/структуре для каждого метода писать модификатор доступа (public), это же не Java.
Quark, Кто вам мешает оставить в заголовке только объявления.
А все определения (или только те, что считаете нужным) оставить в cpp? Вообще стандартная практика так-то.
PS: В прошлом посте ошибся с определениями, конечно. Исправился.
lukepker, Я в шоке :-)
Можете начать отсюда: https://softclipper.net/soft-skachat/clipper-5-2e-...
Помнится в середине 90х как раз закончил работу на клиппере на этой версии. С тех пор не приходилось его использовать. Но впечатления остались самые положительные.
Вы попали на самый неудачный вариант для создания графического приложения - с использованием чистого WinAPI. Как уже было сказано - это мучительно и неудобно, а главное надо хорошо понимать что вы делаете, т.к. это нижний уровень GUI, а у вас с этим проблемы.
На самом деле, вам стоит подумать - а нужно ли вам в принципе приложение с граф.интерфейсом, т.к. задача у вас примитивная, если не надо рисовать графики, то все остальное прекрасно делается в консольном приложении. А кроме того это гораздо проще.
Если же сильно хочется GUI, рекомендую использовать Qt. И может быть даже не MSVS, а QtCreator.
Ruslan, да и провайдер далеко не факт что в принципе сможет это сделать, т.к. возможно маршрут изменен где-то на промежуточном этапе, который не зависит от твоего провайдера.
Может на вашем компе появился какой-нить процесс который: занимает канал связи, занимает процессорное время, отжирает память.
Может нагрузка на облаке выросла или DDOSят его. Может в прошлый раз облако было ближе к вам, а сейчас переехало на край света.
Причин увеличения задержки и помимо провайдера может быть очень много.
Вообще рекомендуют использовать в конструкторах excplicit всегда.