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

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

Cогласовать вызов из разных потоков WriteFile ReadFile FilePointe [D7, WinXP]


Страницы:   1 2

msn777 ©   (2007-11-05 15:09:00) 

Как согласовать одновременный вызов из разных потоков WriteFile, ReadFile и общий FilePointer

Подскажите, может, кто сталкивался с такой задачей.
Пишу приложение, которое должно в одном потоке в реальном режиме времени читать данные из внешнего устройства в ОЗУ ПК, в другом потоке записывать данные из ОЗУ ПК в файл, а в третьем потоке отображать на экране выбираемый пользователем участок данных.

Т.е. получается в потоке записи:
SetFilePointer(hSwapFile, 0, NULL, FILE_END);
WriteFile (hFile …)

В потоке прорисовки:
На основании выбранного участка данных определяем Position
SetFilePointer(hFile, Position, NULL, FILE_BEGIN);
ReadFile (hFile …)

Может ли быть, так что во время чтения, например блока данных размеров 100 KB, после прочтения 50 KB управления получит поток записи, т.е. установит FilePointer в конец файла и запишет очередной блок данных, после чего управление вернется потоку чтения, и он дочитает оставшиеся 50 KB с “правильной” позиции или с конца файла, куда будет указывать FilePointer?
Следит ли Windows за тем что бы, например если ReadFile была прервана (если она прерывается) то не дочитанный кусок был дочитан с той позиции, на которой чтение было прервано? Или нужно использовать какой-то флажок взаимнозапрещающий одновременно запить / чтение.

Спасибо.


MetalFan   (2007-11-05 18:57:00) [21]


> Следит ли Windows

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


Страницы:   1 2

Наверх

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