По сути, мне нужен способ вызова функций Matlab из бесконечно длинного отдельного потока.
Во-первых, я знаю, что могу использовать функциональные возможности TCPIP или UDP для связи между двумя экземплярами Matlab. Я объясню, почему это не очень помогает.
Предыстория: я написал класс Matlab, который действует как интерфейс для USB-устройства. Matlab был выбран потому, что мне нужно, чтобы он работал на Mac/Linux/Windows, а целевые пользователи знакомы только с Matlab. Из-за некоторых несоответствий в Matlab на разных платформах я не использую BytesAvailableFcn
или BytesAvailableFcnMode
(мне нужно как можно ближе к реальному времени, а с вышеупомянутым могут быть задержки до 100 миллисекунд для отправки и получения данных), и вместо этого я отправка и опрос порта с фиксированным интервалом с использованием таймера. Это приводит к некоторым накладным расходам, и, если пользователь удерживает основной поток, отправка/получение также останавливается. Теперь одной из наиболее важных функций класса является установка обратных вызовов, основанных на входных данных, полученных от устройства. Пользователь устанавливает свою функцию и заданное условие для соответствия, и объект вызывает его автоматически.
Проблема: этот объект работает хорошо, полностью в фоновом режиме. Однако, как уже упоминалось, он потребляет некоторые ресурсы в потоке Matlab. Мне любопытно, как заставить работать только последовательную оболочку и функцию обратного вызова в своем собственном потоке. Однако, если я скомпилирую его как отдельное приложение (для всех трех платформ), я считаю, что моим единственным решением будет связь TCPIP/UDP. Что затем требует, чтобы объект, работающий в основном потоке, опрашивал порт, чтобы обрабатывать обратные вызовы в реальном времени, что сводит на нет преимущества перемещения его в автономное приложение.
Какие-либо предложения?