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

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

Посоветуйте, какие сложности могут возникнуть


Страницы:   1 2

Sergey Vorobyev ©   (2004-07-14 13:26:00) 

Привет всем!

Повторяю (Модераторам: я что-то не понял, а почему тему удалили?)

Собираюсь реализовать один алгоритм, но сомневаюсь стОит ли делать реализацию таким образом и стОит ли даже начинать.
Поделитесь опытом, если кто с таким сталкивался.

Суть в следующем.
В одном и том же процессе и потоке два модуля работают с одним и тем же файлом на диске. Оба модуля используют CreateFile, ReadFile, WriteFileдля этого.. Но каждый модуль открывает свой Handle для этого файла. Каждый из модулей читает и записывает в файл, осуществляются проверки на конец файла, иногда файл обрезается ( SetEndOfFile) и т.п.
Вопрос: Не возникнет ли каких либо конфликтов, блокировок при операциях чтении/записи, или еще каких-нибудь "подводных камней" ?
И чуть не забыл самое главное, операции чтения и записи асинхронные, т.е. используются overlapped структуры.

Спасибо


han_malign   (2004-07-14 14:09:00) [1]

...не стОит...не стОит...
- тогда уж сразу файл мусором забивай - проще, а результат одинаковый...


Reindeer Moss Eater   (2004-07-14 14:08:00) [2]

Да согласен я с этим!
Для процесса не существует, а для команды разработчиков - существует


Запись в файл осуществляет кодовый поток, а не команда разработчиков с ворохом юнитов.


Sergey Vorobyev   (2004-07-14 14:07:00) [3]


> Дурь это.
> Вот что я скажу.

Все посты со 2 до 20 можно удалить, а 20-й сделать ответом на вопрос :)


Reindeer Moss Eater   (2004-07-14 14:04:00) [4]

Дурь это.
Вот что я скажу.


Sergey Vorobyev   (2004-07-14 14:02:00) [5]


> два разных модуля существуют пока ты не нажал F9.
> После этого никаких модулей вообще нет.
> Есть потоки и процессы.

Да согласен я с этим!
Для процесса не существует, а для команды разработчиков - существует


Sergey Vorobyev   (2004-07-14 14:00:00) [6]


> писать снова по тому же листу

C этим все нормально, если будет затираться, это мне как раз и нужно, чтобы второй модуль мог затереть то, что написал первый.
Главное, что меня интересует, чтобы не было каких-нибудь конфликтов или блокировок (deadlocks)..


Reindeer Moss Eater   (2004-07-14 13:57:00) [7]

Это связано с тем что два разных модуля

два разных модуля существуют пока ты не нажал F9.
После этого никаких модулей вообще нет.
Есть потоки и процессы.


Reindeer Moss Eater   (2004-07-14 13:56:00) [8]

Представим что мальчику в школе задали написать сказку про белого бычка на одном листе бумаги.
Пришел он домой, сел за стол.
Заходит мама (основной поток) и говорит парню: пиши сказку!. А сама выходит из комнаты  (writefile с оверлаппед)
Парень начинает писать (асинхронная операция записи)
Основному потоку (маме) взгрустнулось, она снова заходит в комнату к сыну и говорит: "Пиши сказку!" (сама уходит)
Парень бросив все начинает писать снова по тому же листу (асинхронная операция записи)
Основному потоку (маме) взгрустнулось, она снова заходит в комнату к сыну и говорит: "Пиши сказку!" (сама уходит)
и так далее....


Sergey Vorobyev   (2004-07-14 13:55:00) [9]

Модераторам:
Если вопрос действительно глупый, или нет ответа, или обсуждение пойдет так и дальше, то нет смысла, удаляйте ветку..
Эх:(


Sergey Vorobyev   (2004-07-14 13:51:00) [10]


> зачем одному потоку одного процесса два хендла одного и
> того же файла.

Это связано с тем что,
два разных модуля(про это я писал в 1 посте) открывают этот файл одновременно (например в основной проге и в dll или в двух юнитах). Соответственно у каждого текущий указатель будет свой.. И каждый работает сам по себе..


Reindeer Moss Eater   (2004-07-14 13:49:00) [11]

Твоя идея мне напоминает периодически возникающие темы про вызовы синхронного метода в OnClick таймера.


Reindeer Moss Eater   (2004-07-14 13:47:00) [12]

Это если не мучать тебя вопросами зачем одному потоку одного процесса два хендла одного и того же файла.


Sergey Vorobyev   (2004-07-14 13:46:00) [13]


> Твой сабж - мусор

Согласен в какой-то степени.
Честно говоря долго думал, как же назвать тему чтобы отразить суть, но не придумал.. Если бы знал, что такая реакция будет, то написал бы хотя бы что-нибудь типа "подводные камни при асинхронном доступе к файлам", хотя это не отразило бы суть вопроса.
Так что не обижайтесь..


Reindeer Moss Eater   (2004-07-14 13:45:00) [14]

Ключевые слова асинхроннои один и тот же файл
Прошу обратить внимание именно на ключевые слова


Sergey Vorobyev   (2004-07-14 13:43:00) [15]

Ключевыми здесь являются слова: асинхронно, в одном процессе и одном потоке, каждый открывает свой Handle..

Если бы например доступ был в разных потоках (Threads), то предполагаю, было бы все намного сложнее, если бы модули работали с одним Handle, то было бы намного проще и т.п.
Прошу обратить внимание именно на ключевые слова


Reindeer Moss Eater   (2004-07-14 13:43:00) [16]

не совсем о синхронизации доступа к файлам..
Конечно не совсем.
Прочитай о смещениях и перемещении указателя при WriteFile с использованием Overlapped и без.
Есть отличия.

иногда файл обрезается


Думкин   (2004-07-14 13:42:00) [17]

> [6] Sergey Vorobyev   (14.07.04 13:39)

Он вроде не модератор, но правила хнает.
Тему ветки надо называть соответственно и все.
Очень часто народ судит о содержимом по сабжу. Твой сабж - мусор, равно как и мой пост. Ясно?


Sergey Vorobyev   (2004-07-14 13:39:00) [18]


> 3] MBo ©   (14.07.04 13:33)

Так это вы ее :(

Я вообще-то не согласен, т.к. вопрос не совсем о синхронизации доступа к файлам..

> к мусору типа "Пацаны! Памагите!".

не "помогите", а посоветуйте

Но слово мОдера закон..

По вашим словам это так просто, тогда сами бы хоть ответили, но видимо, просто никому нечего сказать (не в обиду всем)..


Reindeer Moss Eater   (2004-07-14 13:37:00) [19]

1.
Посоветуйте, какие сложности могут возникнуть


2.
> Ну а критические секции и объекты синхронизации почему не
> используются?

Они в моей программе не нужны


Странный ты какой-то.


Reindeer Moss Eater   (2004-07-14 13:36:00) [20]

А что здесь такого, обычное дело

Надо ОС указывать в вопросе.
Что бы обычные дела были обычными для всех.


Страницы:   1 2

Наверх

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