У меня есть похожее приложение, и я использую сокеты TCP с установленным параметром TCP_NO_DELAY (отключает алгоритм Nagle, который выполняет какую-то буферизацию пакетов).Сокеты должны обеспечивать частоту обновления 100 мсек без проблем, хотя фактическая сетевая задержка всегда будет оставаться неизвестной переменной.Для моего приложения это не имеет значения, пока оно находится под определенным лимитом (это также проверяется отправкой метки времени с каждым пакетом и большими красными диалоговыми окнами, если дельта метки времени становится слишком большой:]).Имеет ли это значение для вашего приложения?Т.е. важно ли, чтобы всякий раз, когда инструмент LV получал новый семпл, его значение приходилось делать в приложении C в пределах x mSec?
Вы можете получить подход dll, но он не так прост, как сокеты иэто сделает два приложения более зависимыми друг от друга.Переменный доступ будет в значительной степени мгновенным, хотя.Я вижу по крайней мере две возможности:
- поместить ваше целое C приложение в dll (поначалу может показаться странным подходом, но он работает), и LV загрузить его и вызватьметоды на это.Например, чтобы запустить приложение, LV вызывает метод dll Start (), а затем в цикле LV получает свои образцы, вызывает метод dll NewSampleValue (0 или около того. Также означает, что ваше приложение не может работать автономно, если вы не напишите для него отдельный процесс хоста.
- просмотр общей памяти процесса и совместное использование памяти приложением C и другой dll. LV загрузит эту dll и вызовет для нее метод для записи значения в общую память, а затем приложение C сможет прочитать еепосле опроса флага (который нуждается в блокировке!).
- может также быть возможным заставить приложение C вызывать программу LV с использованием вызовов dll / activeX /?, но я не знаю, как работает эта система..
Я бы определенно держался подальше от файлового подхода: дисковый ввод-вывод может быть реальным узким местом, а также имеет проблему с блокировкой, которую сложно решить с файлами. Приложение C не может прочитать файлв то время как LV пишет это, и наоборот, что может привести к дополнительным задержкам.
В отношении sidenote вы можете видеть, что каждый из описанных выше подходов использует либомодель push или pull (TCP может быть реализована обоими способами), это может повлиять на ваше окончательное решение о том, какой путь выбрать. Push = LV сигнализирует напрямую приложению C, pull = C приложение должно опрашивать флаг или запрашивать LVдля значения.