Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многопоточная работа с файлами через DLL [Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

VEG ©   (2004-08-10 18:37:00) 

Хочется узнать ваше мнение, реально ли все это...
Мне необходимо реализовать систему для многопоточной работы с файлами. Я предполагаю, что это можно сделать через DLL. Как должна работать система?
На машине запущено несколько программ. Скажем, 3 программы - программа a.exe, b.exe, и c.exe. В память подгружена DLL fs.dll, и все три программы ее используют. В DLL есть общая функция, которой передаются запросы на различные действия с файлами (чтение, запись). Эта функция (точнее, функции. по функции на разные виды запроса) проверяет, есть ли поток, работающий с этим файлом. Если поток обнаружился, К владельцам потока дописывается имя запросившей программы, и ее действия загоняются в стек (или очередь, в зависимости от приоритета). Если потока не существует, он создается, и его владельцем становится запрашивающая программа.
Когда программа посылает запрос на закрытие файла, функция в DLL проверяет, есть ли еще владельцы у потока, и если нет, то поток уничтожается.
Т.е. получается, что программы a.exe и c.exe могут параллельно использовать и изменять файл z.dat, а программа b.exe будет работать с файлами s.dat и j.dat.
Соответсвенно, когда хоть одна программа использует многопоточную работу с файлами, эта DLL должна висеть в памяти в одном адресном пространстве для всех программ, т.е. все глобальные переменные в этой DLL должны быть идентичны для вызовов из любых программ. Если же DLL никто не использует, она выгружается.
Такая идея реализуема с помощью DLL? Или нужно клонить в сторону сервисов?
Совместимость важна, поэтому система должна работать как в ОС Windows NT, так и в Windows 9x.

P.S. Вам может показаться эта идея довольно адсурдной, но скажу, что я преследую несколько иные цели. DLL не будет манипулировать данными из файла, но совершенно не в таком виде, как они записаны в файле...

P.P.S. Дополнительный вопрос, касающийся этой проблемы. Система из DLL трех уровней будет сильно тормозить? Т.е. Программа вызывает функции из одной DLL, эта DLL вызывает функции DLL многопоточной работы с файлами, а эта DLL, в свою очереь, вызывает функции из DLL касательно структур данных.
Дело в том , что на мне будет лежать ответсвенность за промежуточную DLL (она будет одна). DLL первого и третьего уроня должны писать совершенно другие люди, в соответствии с SDK. Или это будет сильно тормозно?
Объемы данных большими не планируются - в среднем до мегабайта, и вообще примерно до 100Мб.


VEG   (2004-08-10 18:56:00) [21]

Ах, да... Вот еще что. Когда был подан запрос, программа не продолжает выполняться - функция после того, как из стека запрос извлечется и выполнится, должна вернуть результат, и только тогда продолжается выполнение программы.


Sun bittern   (2004-08-10 18:56:00) [22]

Касательно выше изложенного скорее всего на помощь придет технология COM. Т.е. подсчет сылок (сколько клиентов юзает) проще наверно релизуется с помощью COM. А по поводу тормозов, только голова и руки от этого зависят :)


Romkin   (2004-08-10 18:52:00) [23]

Бррр... Городить такое...
Что за работа с файлами? В любом случае, ты должен отслеживать блокировки, а то если два потока будут изменять одно и то же место в файле - ой! И dll, кстати, использовать совсем не обязательно :))


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо