| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > DLL (Запись в txt файл) |
| Автор: 000Alex 26.7.2013, 18:05 |
| Приветствую всех! Вопрос таков: Недавно увидел исходник очень интересной программы, заинтересовал один механизм. Вместо того что бы прямо из DLL библиотеки писать в файл, автор посылает сообщение с данными в программу, программа реагируя на сообщение записывает в файл пришедшие ей данные. И тут я подумал, неужели скорость чтения записи может вызвать сбои? Буду очень благодарен за любой адекватный ответ! |
| Автор: Alexeis 26.7.2013, 18:44 |
| Вероятно делается для соблюдения правильной очередности записи. Когда 2 участка кода пишут в один файл независимо, то могут получиться непредсказуемые результаты. |
| Автор: Illusion Dolphin 26.7.2013, 18:45 | ||||
"Скорость чтения записи вызывает сбои" в хреновой плохой архитектуре тчк Добавлено через 6 минут и 2 секунды
И для такого есть много механизмом синхронизации, отправлять сообщения необязательно. Отправка сообщений - это штука не быстрая. |
| Автор: 000Alex 26.7.2013, 19:26 |
| Схема у автора рабочая сбоев не дает! Подход вызывает кучу вопросов. Как я уже писал выше в его проект входит EXE, DLL. В моем случае EXE нет только DLL, теперь я в недоумении как реализовать поставленную задачу. В голову приходит только одно в первой DLL делать вычисления во второй DLL записывать в файл результат. То есть вычислил, передал опять вычислил, передал… Может у кого есть идеи. Прошу прощения, но раньше не приходилось сталкиваться с данными задачами. (Да и пример данного подхода был, реализован в keylogger, нашел случайно, когда искал материалы, которые помогут двинуться в нужном направлении для решения свое задачи. ) |
| Автор: 000Alex 26.7.2013, 19:35 | ||||||||||||
Да возможно вы правы! Я, наверное, зациклен на этом коде, потому что сомневаюсь, что будет разумно из той же DLL где происходят вычисления записывать в файл, думаю, будут тормоза, встречал подобные проблемы. Добавлено через 7 минут и 25 секунд
В примере мне неизвестного автора сообщение передавалось в EXE. У меня в проекте только DLL должны быть! Вот я и решил создать DLL для обмена и посылать ей сообщение она будет записывать! Добавлено через 11 минут и 19 секунд Честно сказать я не знаю как это лучше сделать. Я в тупике! Нет сделать я могу, но, насколько это будет целесообразно. Добавлено через 12 минут и 37 секунд В результате может получиться каша кода и костыли. Этого допускать нельзя!!! |
| Автор: northener 26.7.2013, 20:29 |
Очень интересно. Что же это за проект? И зачем библиотеке нужна запись в файл? |
| Автор: 000Alex 26.7.2013, 20:37 | ||
Таких проектов не бывает?. К примеру, подключаемый модуль (Плагин) для приложения некое расширение для программы. Библиотека, содержащая некий набор полезных функций. Думаю это далеко не вся область применения. |
| Автор: Illusion Dolphin 26.7.2013, 21:09 | ||||
Само собой разумеется )
Плагины принято делать через интерфейсы, и взаимодействие всё через них. И без отправок сообщений. Мханизм взаимодействия в любом случае зависит от задачи - насколько часто насколько большие данные пересылаются. Но если у вас задача только написать плагин, то я бы не трогал отправку сообщений. |
| Автор: StranikS 26.7.2013, 21:24 | ||||
| Не совсем понятно в чем суть вопроса? По тому что я тут прочитал: 1.
С чего это вдруг такое, если код написан без глупостей, то ни каких дополнительных тормозов не будет. Только вы должны понимать что если вы вызвали функцию из длл стандартным образом, то пока она не выполниться основная программа будет висеть. Поэтому если там мега вычисления на 10 минут и 200 Мб текста для записи, то вызывать такую веселую функцию из длл нужно в отдельном потоке. Но это проблема уже того кто основную программу делает. 2.
А это то зачем делать, вы думаете что если часть кода из одной длл в другую вынести, то это как то повлияет на алгоритм? Ничего подобного, делайте все в одной dll. Что касается того что вы видели, то ничего догматического тут нет. Просто он сделал как проще (как ему показалось), вынес в длл то, что по считал нужным. 3. Почему вас беспокоит проблема асинхронного доступа к файлу? Вы пишите длл!!! А это значит что тот кто будет внедрять ее в своей программе, тот по определению будет знать что ваша dll пишет в файл и он просто не допустит асинхронного доступа к этому файлу из своей программу, точно также как вы не будете совать пальцы в розетку/газонокосилку/... несмотря на то что это можно сделать. |
| Автор: 000Alex 26.7.2013, 21:28 | ||||||
Не все так просто! Данные не большие (Вычисления, объем результата не велик). Записывать буду в TXT или XML. Скорее всего, XML. Не могу определиться с записью в файл. Встречал подобную проблему, запись производилась из той же DLL где и вычислялось. Результат зависание, сбои при выполнении кода. Вот не знаю что делать! Добавлено через 6 минут и 31 секунду Ночная паранойя! Напишу в одной библиотеки все. Посмотрю, что получится. Спасибо за помощь! |