Межпроцессное взаимодействие средствами PascalABC.NET

Возможно ли, средствами pascalABC.NET реализовать межпроцессное взаимодействие? Первый процесс даёт команды второму. Второй их выполняет. Конечно, можно завести отдельный текстовик, куда будут писаться команды и второй процесс будет этот текстовик всё время читать, но так делать не хочется

Если на одном компе то System.IO.Pipes. Если на разных то System.Net.Sockets.

А файлы это не решение. Они на такое не расчитаны и должны использоваться только для сохранения информации после завершения программы.

P.S. А почему текстовик то? Вряд ли вам нужна человеко-читаемость этих комманд, лучше передавать бинарные данные.

1 лайк

Да, я ждал такого ответа, спасибо) есть ли документации? А то в стандартной не нашёл про это

Это документация по паскалю. А пространство имён System и всё в нём содержащееся это часть среды .Net.
Собственно вот первая страница что даёт гугл: System.IO.Pipes Namespace | Microsoft Docs
(но я сменил версию .Net на .Net Framework4.8, потому что под него компилирует паскаль)

1 лайк

Либо можете посредством external из winAPI дёрнуть PostMessage GetMessage и иже с ними, если охота низкоуровнещины. Ещё был какой-то стандартный модуль для этого дела, но не припомню названия уже

PostMessage это подпрограмма для оконных приложений. С ней можно сделать только очень кривой аналог всего 1 пайпа на всю программу.

И необходимый уровень контроля выделения и освобождения памяти, чтобы передавать >12 байт в одном сообщении - явно не для новичков.


Если таки хочется низкоуровневости - надо сначала понять что пайпы это обёртка особых файловых дескрипторов. По сути, система создаёт виртуальный файл, существующий только в оперативной памяти. При этом на этот виртуальный файл накладываются некоторые ограничения: к примеру перемещаться по файлу нельзя и при прочтении данные из начала файла пропадают.

На сколько я помню – консоль дескриптором не обделена. Но если и она не создаётся, то можно использовать PostThreadMessage()

А то, что этот метод имеет свои тонкости – конечно. Но это везде так по сути. Тут уж кто в чём копаться любит

всё идеально работает. Именно то, что мне нужно… ещё и разобрался наконец-то, что это за system такой

Файл вполне можно использовать для IPC, если это чтото простое.

Ну а так еще есть варианты ipc через system.io.memorymappedfiles если надо много и быстро и всякие message queues и т.п.

Решение через файлы - это решение “лишь бы как-то работало”, не маштабируемое и с кучей лишних действий для компьютера. Другими словами костыль.