nesco, ну... я представил, как будет удобнее хиасмеру - самому разбираться с оффсетами и размерами, или предоставить все компонентам.
Этот топик читают: Гость
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
карма: 10 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Assasin писал(а): как это сделано и в обычном штатном MemoryВ обычном штатном Memory НЕ СДЕЛАН (например) 32-х битный float в формате BigEndian. А в чужих файлах этого добра - да сколько угодно. И при всем этом, у нас "это уже есть" |
|||
карма: 9 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Насколько я понял Assasin-а, то он предлагает типизировать данные ввода/вывода, че-то мне подсказывает, что по типу StreamPack/StreamUnPack, только для одного аргумента, на уровне компонента и для всех типов данных.
Galkov, че-то мне кажется, что в этом компоненте не хватает события изменения данных. Получается, что дав нам проекцию, компонент дальше на нас плевал, че мы пишем или читаем из этой проекции ему по барабану. Одно дело , если работаем с файлами, в пределах одного приложения, а вот если работаем в межпроцессном взаимодействии, то другое приложение никак не узнает, когда первое ему что-то послало. |
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Да, не узнает.
Первое, что мне приходит на ум - не надо быть святее папы римского. Для этого в системе (да и у нас, впрочем) есть всякие там Event-ы. Для того кто захочет обменяться сигналами (типа: "читай, собака") - такая возможность есть. Хотя, являясь объектом ядра (как и Event), он должен БЫ иметь свое сигнальное состояние. А вот когда сие происходит, и какая от этого может быть народнохозяйственная польза - НЕ ПОМНЮ... Читать буквари надо... |
|||
карма: 9 |
|
Ответов: 4630
Рейтинг: 749
|
|||
В качестве предложения: если нужен межпроцессный стрим - можно сделать копию MemoryStream, обозвав её SharedMemStream на основе того же принципа, только без работы с дисковым файлом. В MemoryStream добавить только свойство Name и всё - для пользователя будет по барабану, как оно внутри будет работать. Возможно ещё doOpen, doClose, onError
|
|||
карма: 26 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Galkov писал(а): Для этого в системе (да и у нас, впрочем) есть всякие там Event-ыА пример можно, как использовать компонент Event в межпроцессном взаимодействии. Можно на готовом примере из справки по SharedStream. ------------ Дoбавленo в 13.30: Netspirit писал(а): В качестве предложения: если нужен межпроцессный стрим Меня сейчас больше всего волнует -- как это все безобразие засинхронизировать Че-то я не догоняю пока, а использовать таймер и читать по нему весь стрим целиком, или по кнопке читать, получив сообщение типа -- Васька, я тебе данные послал, можешь смотреть -- это не дело. |
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Используешь Events для сигнализации чего-либо, WaitObject - для ожидания смены состояния Events (в коде - CreateEvent, циклично или по таймеру WaitForSingleObject).
|
|||
карма: 26 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Netspirit писал(а): Используешь Events для сигнализации чего-либо, WaitObject - для ожидания смены состояния Events (в коде - CreateEvent, циклично или по таймеру WaitForSingleObject)Ты можешь пример дать, как это организовать с помощью наших компонентов в двух экземплярах приложения. |
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Схема 1: code_34913.txt
Схема 2: code_34914.txt 1) Запускаешь схему 1, потом 2 2) В схеме 2 жмешь "Ожидать" 3) В схеме 1 жмешь "Сигнализировать" |
|||
карма: 26 |
| ||
файлы: 2 | code_34913.txt [432B] [363], code_34914.txt [917B] [369] |
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Netspirit, спасибо, частично понятно. А как сделать такое одной схемой, но разными копиями приложения
|
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Так WaitObject на тот самый Events (либо другой с тем же именем)...
|
|||
карма: 26 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Netspirit писал(а): Так WaitObject на тот самый Events (либо другой с тем же именем)...Пробовал, виснут начисто обе копии программы |
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Естественно, виснут. А как нужно?
Предполагаю, нужно в параллельном потоке поставить цикл, в цикле делать doWaitObject с таймаутом, скажем, 1 сек. Вот только в описании onWait сказано, что выдаёт код возврата, а в коде - ничего не выдаёт. По коду возврата - если ожидание успешно/ошибка - прервать цикл, событие наступило. Если код TIMEOUT - продолжить исполнение. Вместо кода можно просто добавить событие onTimeout. Можно без цикла, с бесконечным ожиданием. Тогда поток придётся убивать только по doStop. |
|||
карма: 26 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Ну например...
Если уж непременно "одна копия"
------------ Дoбавленo в 08.36: Netspirit писал(а): что выдаёт код возврата, а в коде - ничего не выдаёт.Безобразие ------------ Дoбавленo в 09.27: Между нами девочками говоря... Сигнал получают ВСЕ копии программки. А вот ЕСЛИ завести св-во ManualReset (второй аргумент в CreateEvent), то при значении False -- сигнал будет получать только одна копия И, в вышеприведенной схеме - связь на doReset становится лишней. nesco, чего скажешь про "завести св-во ManualReset" |
|||
карма: 9 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Galkov писал(а): Сигнал получают ВСЕ копии программкиАга, понятно. Но остался один ламерский вопрос -- а почему оно сейчас не ловит событие в приложении, из которого послано Galkov писал(а): чего скажешь про "завести св-во ManualReset"Я не против, давай реализацию. |
|||
карма: 22 |
|