Обмен данными между процессами
Необходимо написать два процесса, первый должен периодически вызывать второй и передавать ему массив данных. Второй процесс, получив данные, должен произвести над ними вычисления и вернуть первому процессу результат(число).
Вопрос: как это лучше реализовать на C++ Builder. Может простенький примерчик, или где об этом можно прочитать..
Заранее спасибо.
Данные можно передать каким нибудь компанентом, дав потоку ссылку на себя указателем this! Но если честно, компаненты стабильно работают. только в одном потоке, любое скрещенное обрашение приводит к падению приложения. Ну ведь не перевились ещё такие способы передачи данных, как внешние носители: Файлы, инишники, реестр, hml. Ещё можешь разобраться с потоками Stream!
1. Речь идет о процессах, а не потоках.
2. При чем тут компоненты?
3. Не любое "скрещенное обрашение" приводит к падению приложения.
4. "Способы передачи данных, как внешние носители" - это крайне неверный подход.
5. Чем файл отличается от "инишника" или от html (кстати последнее язык разметки)?
6. Ты предлагаешь передавать данные через реестр? Сам частенько пользуешься этим советом? :)
7. Хм... а потоки здесь каким боком?
А разделяемая память?
Дело в том, что второй процесс - это модель которая возвращаяет набор расчитанных критериев. А первый процесс это модуль генетического алгоритма. Предполагается, что оба этих модуля разрабатываются отдельно друг-от друга и модуль ГА может работать с произвольной моделью.
Имхо, проще всего по IP (да и гибко получается, прочессы смогут даже на разных манишах работать).
Почему бы тогда не по телеграфу?
Какая разница для данной задачи, какой протокол использовать на сетевом уровне, если задача находиться на прикладном уровне?
Disu, читай приведенную в самом начале ссылку, используй pipe!
Почему бы тогда не по телеграфу?
Какая разница для данной задачи, какой протокол использовать на сетевом уровне, если задача находиться на прикладном уровне?
Disu, читай приведенную в самом начале ссылку, используй pipe![/QUOTE]
Не язви. Иксы в *никсах обмениваются по IP, и ничего. Одному только Green религия не позволяет IP использовать.
Смысл то что надо организовать обмен между 2-мя отдельными процессами. Способов комуникации много (нормальных, а не через файл). Что выбрать лучше - решать пользователю, в зависимости от специфики его задачи. Если оба приложения обязанны вополнятся на одной машине - логичней через пайпы. Возможен обмен в сети - прощще через сокеты.
По поводу разного уровня IP протокола и протокола обмена между процессами пользователя находящимися уже на прикладном уровне - полностью согласен с Грином
Смысл то что надо организовать обмен между 2-мя отдельными процессами. Способов комуникации много (нормальных, а не через файл). Что выбрать лучше - решать пользователю, в зависимости от специфики его задачи. Если оба приложения обязанны вополнятся на одной машине - логичней через пайпы. Возможен обмен в сети - прощще через сокеты.
По поводу разного уровня IP протокола и протокола обмена между процессами пользователя находящимися уже на прикладном уровне - полностью согласен с Грином[/QUOTE]
Я не настаиваю на использовании именно IP, решать, естественно, автору программы, т.е., в данном случае, Disu. Просто я считаю, что такой способ тоже возможен. Иксы привёл как один из примеров.
И что с того, что "разный уровень IP протокола и протокола обмена между процессами"?
По поводу сокетов:
[QUOTE=MSDN]Windows Sockets 2 (Winsock) enables programmers to create advanced Internet, intranet, and other network-capable applications to transmit application data across the wire, independent of the network protocol being used. With Winsock, programmers are provided access to advanced Microsoft® Windows® networking capabilities such as multicast and Quality of Service (QOS).[/QUOTE][QUOTE=MSDN]Winsock programming previously centered around TCP/IP.[/QUOTE]
Т.е. используя сокеты, вы используете тот же самый IP. Или IPX, или какой у вас сетевой протокол поднят. Что я не так выше по треду сказал?
Тоесть ясно что вы имели ввиду, но фраза получилась двусмысленной. А так никто не против сокетов. Просто если рассматривать взаимодействие с точки зрения протокола сетевого уровня, можно спустится и на физический и вспомнить про линии передачи електрически, оптических и т.д. сигналов. ну а потом уже пошла софистика ))
aks, меня правильно понял. pipe - это прикладной уровень, то что и нужно автору, а уж ниже этот же самый pipe может быть завязан на IP или SharedMemory и т.п.
Почему бы тогда не по телеграфу?
Какая разница для данной задачи, какой протокол использовать на сетевом уровне, если задача находиться на прикладном уровне?
Disu, читай приведенную в самом начале ссылку, используй pipe![/QUOTE]
Green, а какие из pipes лучше использовать?
http://forum.codenet.ru/showpost.php?p=31942&postcount=3
Если процессы не могут быть порождены друг-другом, используй именнованные (Named Pipes).
Если организовать так, что один процесс порождает другой, то лучше использовать неименованные (Anonymous Pipes). Я давно как-то приводил пример, он не идеальный, но для осмысления подойдет:
Если процессы не могут быть порождены друг-другом, используй именнованные (Named Pipes).
Цитата: Green
Спасибо за ссылку. Очень полезная статья.
Круто, ценитель спустя 4 года. )