Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DLL (Запись в txt файл), Механизм записи в txt файл из DLL  
:(
    Опции темы
000Alex
Дата 26.7.2013, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.7.2013

Репутация: нет
Всего: нет



Приветствую всех! Вопрос таков: Недавно увидел исходник очень интересной программы, заинтересовал один механизм. Вместо того что бы  прямо из  DLL библиотеки писать в файл, автор посылает сообщение с данными в программу, программа реагируя на сообщение записывает в файл пришедшие ей данные. И тут я подумал, неужели скорость чтения записи может вызвать сбои? Буду очень благодарен за любой адекватный ответ!

Это сообщение отредактировал(а) 000Alex - 26.7.2013, 18:14
PM MAIL   Вверх
Alexeis
Дата 26.7.2013, 18:44 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Вероятно делается для соблюдения правильной очередности записи. Когда 2 участка кода пишут в один файл независимо, то могут получиться непредсказуемые результаты. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Illusion Dolphin
Дата 26.7.2013, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

неужели скорость чтения записи может вызвать сбои?

"Скорость чтения записи вызывает сбои" в хреновой плохой архитектуре тчк

Добавлено через 6 минут и 2 секунды
Цитата

 Когда 2 участка кода пишут в один файл независимо, то могут получиться непредсказуемые результаты.

И для такого есть много механизмом синхронизации, отправлять сообщения необязательно. Отправка сообщений - это штука не быстрая.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
000Alex
Дата 26.7.2013, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.7.2013

Репутация: нет
Всего: нет



Схема у автора рабочая сбоев не дает! Подход вызывает кучу вопросов. Как я уже писал выше в его проект входит EXE, DLL. В моем случае EXE нет только DLL, теперь я в недоумении как реализовать поставленную задачу. В голову приходит только одно в первой DLL делать вычисления во второй DLL записывать в файл результат. То есть вычислил, передал опять вычислил, передал… Может у кого есть идеи. Прошу прощения, но раньше не приходилось сталкиваться с данными задачами.  
(Да и пример данного подхода был, реализован в keylogger, нашел случайно, когда искал материалы, которые помогут двинуться в нужном направлении для решения свое задачи. )
PM MAIL   Вверх
Alexeis
Дата 26.7.2013, 19:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Illusion Dolphin @  26.7.2013,  19:45 Найти цитируемый пост)
И для такого есть много механизмом синхронизации, отправлять сообщения необязательно. Отправка сообщений - это штука не быстрая. 

  Сообщение это один из механизмов синхронизации. И более того позволяет даже многопоточные операции синхронизировать. К примеру, если осуществляется вывод текста, то одна задача может последовательно выводить предложения, однако если 2я задача примешается, то может получиться что в файле будут перемешены строчки из разных абзацев. Обычная схема доступа к ресурсу с захватом, когда решения о допустимости операции записи выполняет контроллер ресурса. Что такое сообщение по сути? Это добавление элемента в очередь с определенным приоритетом. Любой контроллер ресурса, даже элементарный мьютекс имеет свою очередь желающих его захватить.

Добавлено через 1 минуту и 35 секунд
Цитата(000Alex @  26.7.2013,  20:26 Найти цитируемый пост)
В голову приходит только одно в первой DLL делать вычисления во второй DLL записывать в файл результат. То есть вычислил, передал опять вычислил, передал… Может у кого есть идеи. Прошу прощения, но раньше не приходилось сталкиваться с данными задачами.  

  А зачем создавать Dll для обмена? Достаточно таким же образом отправлять сообщения как это делает Dll. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
000Alex
Дата 26.7.2013, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.7.2013

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 26.7.2013,  18:45)
Цитата

неужели скорость чтения записи может вызвать сбои?

"Скорость чтения записи вызывает сбои" в хреновой плохой архитектуре тчк

Добавлено @ 18:51
Цитата

 Когда 2 участка кода пишут в один файл независимо, то могут получиться непредсказуемые результаты.

И для такого есть много механизмом синхронизации, отправлять сообщения необязательно. Отправка сообщений - это штука не быстрая.

Да возможно вы правы! Я, наверное, зациклен на этом коде, потому что сомневаюсь, что будет разумно из той же DLL  где происходят вычисления записывать в файл, думаю, будут тормоза, встречал подобные проблемы.

Добавлено через 7 минут и 25 секунд
Цитата(Alexeis @ 26.7.2013,  19:30)
Цитата(Illusion Dolphin @  26.7.2013,  19:45 Найти цитируемый пост)
И для такого есть много механизмом синхронизации, отправлять сообщения необязательно. Отправка сообщений - это штука не быстрая. 

  Сообщение это один из механизмов синхронизации. И более того позволяет даже многопоточные операции синхронизировать. К примеру, если осуществляется вывод текста, то одна задача может последовательно выводить предложения, однако если 2я задача примешается, то может получиться что в файле будут перемешены строчки из разных абзацев. Обычная схема доступа к ресурсу с захватом, когда решения о допустимости операции записи выполняет контроллер ресурса. Что такое сообщение по сути? Это добавление элемента в очередь с определенным приоритетом. Любой контроллер ресурса, даже элементарный мьютекс имеет свою очередь желающих его захватить.

Добавлено @ 19:31
Цитата(000Alex @  26.7.2013,  20:26 Найти цитируемый пост)
В голову приходит только одно в первой DLL делать вычисления во второй DLL записывать в файл результат. То есть вычислил, передал опять вычислил, передал… Может у кого есть идеи. Прошу прощения, но раньше не приходилось сталкиваться с данными задачами.  

  А зачем создавать Dll для обмена? Достаточно таким же образом отправлять сообщения как это делает Dll.

В примере мне неизвестного автора сообщение передавалось в EXE. У меня в проекте только DLL должны быть! Вот я и решил создать DLL для обмена и посылать ей сообщение она будет записывать!

Добавлено через 11 минут и 19 секунд
Честно сказать я не знаю как это лучше сделать. Я в тупике! Нет сделать я могу, но, насколько это будет целесообразно.

Добавлено через 12 минут и 37 секунд
В результате может получиться каша кода и костыли. Этого допускать нельзя!!! 
PM MAIL   Вверх
northener
Дата 26.7.2013, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(000Alex @  26.7.2013,  19:35 Найти цитируемый пост)
У меня в проекте только DLL должны быть!

Очень интересно. Что же это за проект? И зачем библиотеке нужна запись в файл?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
000Alex
Дата 26.7.2013, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.7.2013

Репутация: нет
Всего: нет



Цитата(northener @ 26.7.2013,  20:29)
Цитата(000Alex @  26.7.2013,  19:35 Найти цитируемый пост)
У меня в проекте только DLL должны быть!

Очень интересно. Что же это за проект? И зачем библиотеке нужна запись в файл?

Таких проектов не бывает?. К примеру, подключаемый модуль (Плагин) для приложения некое расширение для программы. Библиотека, содержащая некий набор полезных функций. Думаю это далеко не вся область применения. 
PM MAIL   Вверх
Illusion Dolphin
Дата 26.7.2013, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

Сообщение это один из механизмов синхронизации.

Само собой разумеется )

Цитата

 К примеру, подключаемый модуль (Плагин) 

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


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
StranikS
Дата 26.7.2013, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 1.2.2006

Репутация: 1
Всего: 2



Не совсем понятно в чем суть вопроса?

По тому что я тут прочитал:

1. 
Цитата
потому что сомневаюсь, что будет разумно из той же DLL  где происходят вычисления записывать в файл, думаю, будут тормоза, встречал подобные проблемы.


С чего это вдруг такое, если код написан без глупостей, то ни каких дополнительных тормозов не будет. Только вы должны понимать что если вы вызвали функцию из длл стандартным образом, то пока она не выполниться основная программа будет висеть. Поэтому если там мега вычисления на 10 минут и 200 Мб текста для записи, то вызывать такую веселую функцию из длл нужно в отдельном потоке. Но это проблема уже того кто основную программу делает.

2. 
Цитата

В примере мне неизвестного автора сообщение передавалось в EXE. У меня в проекте только DLL должны быть! Вот я и решил создать DLL для обмена и посылать ей сообщение она будет записывать!


А это то зачем делать, вы думаете что если часть кода из одной длл в другую вынести, то это как то повлияет на алгоритм? Ничего подобного, делайте все в одной dll.
Что касается того что вы видели, то ничего догматического тут нет. Просто он сделал как проще (как ему показалось), вынес в длл то, что по считал нужным.

3. Почему вас беспокоит проблема асинхронного доступа к файлу? Вы пишите длл!!! А это значит что тот кто будет внедрять ее в своей программе, тот по определению будет знать что ваша dll пишет в файл и он просто не допустит асинхронного доступа к этому файлу из своей программу, точно также как вы не будете совать пальцы в розетку/газонокосилку/... несмотря на то что это можно сделать.

Это сообщение отредактировал(а) StranikS - 26.7.2013, 21:25
PM MAIL   Вверх
000Alex
Дата 26.7.2013, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.7.2013

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 26.7.2013,  21:09)
Цитата

Сообщение это один из механизмов синхронизации.

Само собой разумеется )

Цитата

 К примеру, подключаемый модуль (Плагин) 

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

Не все так просто! Данные не большие (Вычисления, объем результата не велик). Записывать буду в TXT или XML. Скорее всего, XML. Не могу определиться с записью в файл. Встречал подобную проблему, запись производилась из той же DLL где и вычислялось. Результат зависание, сбои при выполнении кода. Вот не знаю что делать!

Добавлено через 6 минут и 31 секунду
Ночная паранойя! Напишу в одной библиотеки все. Посмотрю, что получится. Спасибо за помощь! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0760 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.