![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
многопоточный доступ к файлу
joo © (2006-08-07 17:19:00)Программа использует большой текстовый файл, с примерным содержанием:
param;param;param...
param;param;param...
param;param;param...
Интересует, как лучше и быстрее организовывать доступ к этому файлу, если в программе сразу несколько потоков будет пытаться открыть, прочитать, записать в файл. Я думаю, что надо каким-то образом блокировать файл при доступе из какого-то потока, а по завершении, разблокировать, дабы дать возможность остальным потоком взаимодействовать с файлом.
Возможные варианты взаимодействия -- это: удаление строки, добавление строки, перезапись строки.
Вот и интересует как лучше и быстрее, какие лучше файловые ф-ии использовать из delphi? или сразу на api?
DiamondShark (2006-08-08 11:39:00) [1]Написать обёртку
TFileAccessor = class
private
FHandle: THandle;
FSynchronizer: TMultiReadExclusiveWriteSynchronizer;
...
public
procedure ReadLine(...);
procedure WriteLine(...);
end;
...
procedure TFileAccessor.ReadLine;
begin
FSynchronizer.BeginRead;
try
// ...
finally
FSynchronizer.EndRead;
end
end;
procedure TFileAccessor.WriteLine;
begin
FSynchronizer.BeginWrite;
try
// ...
finally
FSynchronizer.EndWrite;
end
end;
Пусик (2006-08-08 10:14:00) [2]
> Joe_from_smart (08.08.06 01:38) [3]
> Добавлю, что блокировать нужно только на время записи, чтение
> можно оставить в покое :)
Это вряд ли.
Joe_from_smart (2006-08-08 01:38:00) [3]Добавлю, что блокировать нужно только на время записи, чтение можно оставить в покое :)
clickmaker (2006-08-07 17:25:00) [4]ну апи хоть иногда всего на несколько милисек, но по-любому быстрей.
для разделения доступа лучше TcriticalSection - самый быстрый из всех объектов синхронизации
CS.Enter;
try
// что-то делаешь с файлом
finally
CS.Leave;
end;
для ускорения лучше файл открыть один раз и держать открытым (если возможно)
Сергей М. (2006-08-07 17:23:00) [5]
> или сразу на api?
Это еще зачем ?)