Я хотел бы контролировать процесс моделирования из коммерческого пакета программного обеспечения. Коммерческое программное обеспечение предлагает интерфейс API C, который имеет функцию обратного вызова инициализации для процесса вместе с функцией обратного вызова, которая выполняется на каждом этапе процесса моделирования. На каждом этапе я хотел бы отслеживать / отображать приблизительно 10 значений с плавающей запятой, которые доступны в функции обратного вызова. Я планирую использовать инструмент построения, такой как LightningChart, http://www.arction.com/, контролировать и просматривать значения. Я буду использовать оболочку C ++ / CLI для вызова библиотеки диаграмм .NET на каждом этапе процесса обновления диаграммы.
Я уже создал простую dll, использующую функции обратного вызова API для вывода значений в текстовый файл, в котором я буду выполнять построение графика и анализ после завершения. Хотя моя цель — видеть данные в режиме реального времени.
У меня вопрос, как я могу вызвать форму в обратном вызове инициализации процесса моделирования, которая остается постоянной в течение всего процесса, и я могу обновлять на каждом шаге. Кроме того, какова будет идеальная структура данных для хранения значений параметров процесса, которые также будут постоянными? При использовании C ++ для записи значений данных в текстовый файл с функциями обратного вызова скорость на моем процессоре i7 составляет приблизительно 1700 шагов в секунду. Без использования API и функций обратного вызова для хранения данных скорость моделирования составляет приблизительно 4000 шагов в секунду. Я, очевидно, ожидал бы, что это будет значительно медленнее при составлении графика данных в реальном времени, и это приемлемо. Какие-нибудь мысли?
Поскольку вы намереваетесь составлять график данных в реальном времени, я бы предложил вам использовать файлы с отображением в памяти для обмена данными между процессом моделирования и функцией обратного вызова. Это будет быстрее, чем выполнение операций ввода-вывода над физическим файлом, и вы сможете обмениваться данными.
В функции инициализации вы можете создать форму и обновить значения в ней из обратного вызова, используя файл с отображенной памятью. Вот некоторые ссылки на файлы, отображенные в память link1
link2
Других решений пока нет …