![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
000Alex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.7.2013 Репутация: нет Всего: нет |
Приветствую всех! Вопрос таков: Недавно увидел исходник очень интересной программы, заинтересовал один механизм. Вместо того что бы прямо из DLL библиотеки писать в файл, автор посылает сообщение с данными в программу, программа реагируя на сообщение записывает в файл пришедшие ей данные. И тут я подумал, неужели скорость чтения записи может вызвать сбои? Буду очень благодарен за любой адекватный ответ!
Это сообщение отредактировал(а) 000Alex - 26.7.2013, 18:14 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Вероятно делается для соблюдения правильной очередности записи. Когда 2 участка кода пишут в один файл независимо, то могут получиться непредсказуемые результаты.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
"Скорость чтения записи вызывает сбои" в хреновой плохой архитектуре тчк Добавлено через 6 минут и 2 секунды
И для такого есть много механизмом синхронизации, отправлять сообщения необязательно. Отправка сообщений - это штука не быстрая. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
000Alex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.7.2013 Репутация: нет Всего: нет |
Схема у автора рабочая сбоев не дает! Подход вызывает кучу вопросов. Как я уже писал выше в его проект входит EXE, DLL. В моем случае EXE нет только DLL, теперь я в недоумении как реализовать поставленную задачу. В голову приходит только одно в первой DLL делать вычисления во второй DLL записывать в файл результат. То есть вычислил, передал опять вычислил, передал… Может у кого есть идеи. Прошу прощения, но раньше не приходилось сталкиваться с данными задачами.
(Да и пример данного подхода был, реализован в keylogger, нашел случайно, когда искал материалы, которые помогут двинуться в нужном направлении для решения свое задачи. ) |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Сообщение это один из механизмов синхронизации. И более того позволяет даже многопоточные операции синхронизировать. К примеру, если осуществляется вывод текста, то одна задача может последовательно выводить предложения, однако если 2я задача примешается, то может получиться что в файле будут перемешены строчки из разных абзацев. Обычная схема доступа к ресурсу с захватом, когда решения о допустимости операции записи выполняет контроллер ресурса. Что такое сообщение по сути? Это добавление элемента в очередь с определенным приоритетом. Любой контроллер ресурса, даже элементарный мьютекс имеет свою очередь желающих его захватить. Добавлено через 1 минуту и 35 секунд А зачем создавать Dll для обмена? Достаточно таким же образом отправлять сообщения как это делает Dll. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
000Alex |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.7.2013 Репутация: нет Всего: нет |
Да возможно вы правы! Я, наверное, зациклен на этом коде, потому что сомневаюсь, что будет разумно из той же DLL где происходят вычисления записывать в файл, думаю, будут тормоза, встречал подобные проблемы. Добавлено через 7 минут и 25 секунд В примере мне неизвестного автора сообщение передавалось в EXE. У меня в проекте только DLL должны быть! Вот я и решил создать DLL для обмена и посылать ей сообщение она будет записывать! Добавлено через 11 минут и 19 секунд Честно сказать я не знаю как это лучше сделать. Я в тупике! Нет сделать я могу, но, насколько это будет целесообразно. Добавлено через 12 минут и 37 секунд В результате может получиться каша кода и костыли. Этого допускать нельзя!!! |
||||||
|
|||||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Очень интересно. Что же это за проект? И зачем библиотеке нужна запись в файл? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
000Alex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.7.2013 Репутация: нет Всего: нет |
Таких проектов не бывает?. К примеру, подключаемый модуль (Плагин) для приложения некое расширение для программы. Библиотека, содержащая некий набор полезных функций. Думаю это далеко не вся область применения. |
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Само собой разумеется )
Плагины принято делать через интерфейсы, и взаимодействие всё через них. И без отправок сообщений. Мханизм взаимодействия в любом случае зависит от задачи - насколько часто насколько большие данные пересылаются. Но если у вас задача только написать плагин, то я бы не трогал отправку сообщений. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
StranikS |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.2.2006 Репутация: 1 Всего: 2 |
Не совсем понятно в чем суть вопроса?
По тому что я тут прочитал: 1.
С чего это вдруг такое, если код написан без глупостей, то ни каких дополнительных тормозов не будет. Только вы должны понимать что если вы вызвали функцию из длл стандартным образом, то пока она не выполниться основная программа будет висеть. Поэтому если там мега вычисления на 10 минут и 200 Мб текста для записи, то вызывать такую веселую функцию из длл нужно в отдельном потоке. Но это проблема уже того кто основную программу делает. 2.
А это то зачем делать, вы думаете что если часть кода из одной длл в другую вынести, то это как то повлияет на алгоритм? Ничего подобного, делайте все в одной dll. Что касается того что вы видели, то ничего догматического тут нет. Просто он сделал как проще (как ему показалось), вынес в длл то, что по считал нужным. 3. Почему вас беспокоит проблема асинхронного доступа к файлу? Вы пишите длл!!! А это значит что тот кто будет внедрять ее в своей программе, тот по определению будет знать что ваша dll пишет в файл и он просто не допустит асинхронного доступа к этому файлу из своей программу, точно также как вы не будете совать пальцы в розетку/газонокосилку/... несмотря на то что это можно сделать. Это сообщение отредактировал(а) StranikS - 26.7.2013, 21:25 |
||||
|
|||||
000Alex |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.7.2013 Репутация: нет Всего: нет |
Не все так просто! Данные не большие (Вычисления, объем результата не велик). Записывать буду в TXT или XML. Скорее всего, XML. Не могу определиться с записью в файл. Встречал подобную проблему, запись производилась из той же DLL где и вычислялось. Результат зависание, сбои при выполнении кода. Вот не знаю что делать! Добавлено через 6 минут и 31 секунду Ночная паранойя! Напишу в одной библиотеки все. Посмотрю, что получится. Спасибо за помощь! |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |