Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Вниз

Копирование файлов   Найти похожие ветки 

 
iNew   (2003-08-20 05:18) [0]

При копировании файлов с сетевого диска "G" на свой локальный мне нужно определить не залочен ли файл (FileOpen=-1) и если он залочен то подождать какое-то время.
Как мне это организовать? Просто сделать Sleep() или как-то ещё.


 
Babay   (2003-08-20 06:28) [1]

Ну можно конечно Sleep если время выполнения опреции не критично. А можно как бы скидывать его в очередь отработать другие а потом снова вернуться к файлам находящимся в очереди


 
iNew   (2003-08-20 09:10) [2]

А функция MsgWaitForMultipleObjects для этого не подойдет?


 
panov   (2003-08-20 09:33) [3]

Все зависит от конкретной ситуации.

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

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


 
iNew   (2003-08-20 11:42) [4]

Сделал копирование файлов в отдельном потоке. Копирование необходимо необходимо делать раз в 10 мин (автоматом).
Как лучше сделать? Убивать этот поток и создавать его заново, раз в 10 мин, или делать 10 минутную задержку в потоке.
И если делать 10 минутную задержку в потоке то как её лучше организовать?


 
clickmaker   (2003-08-20 12:14) [5]

В отдельном потоке можно и Sleep


 
panov   (2003-08-20 12:22) [6]

Лучше в потоке:


FTimeOut: Integer;
EndTime: TDateTime;
LastTime: TDateTime;
begin
FTimeOut := 1; //минута для примера
LastTime := now;
EndTime := now + (1/24/60)* FTimeOut;
while not Terminated do
begin
Sleep(100);
if Terminated then break;
if now>=EndTime then ShowMessage("EndTime"); //здесь выполнить то, что тебе нужно.
end;


 
iNew   (2003-08-20 12:39) [7]

> Panov
А почему просто не сделать

while not Terminated do
begin
Sleep(10 мин);
DoSomething;
end;

?


 
panov   (2003-08-20 12:43) [8]

>iNew © (20.08.03 12:39) [7]
А почему просто не сделать

А что будет, если тебе захочется во время ожидания завершить поток?
Например, выполнить метод MyThread.Terminate?

Придется для корректного завершения потока ждать 10 минут.


 
iNew   (2003-08-20 13:15) [9]

Тогда наверно надо сделать так:
FTimeOut: Integer;
EndTime: TDateTime;
begin
FTimeOut := 1; //минута для примера
EndTime := now + (1/24/60)* FTimeOut;
while not Terminated do
begin
Sleep(100);
if Terminated then break;
if now>=EndTime then
begin
DoSomething;
EndTime := now + (1/24/60)* FTimeOut;
end;
end

Мне ведь нужно чтоб DoSomething работало каждые 10 мин в теч-е всего дня.


 
Anatoly Podgoretsky   (2003-08-20 13:23) [10]

Тогда надо использовать таймер ли на десять минут, если требуется же6сткое повторение или перезапускать его после окончания операции, если требуется пауза между интервалами в 10 минут.


 
iNew   (2003-08-20 13:40) [11]

А вариант EndTime := now + (1/24/60)* FTimeOut;
чем плох?


 
Anatoly Podgoretsky   (2003-08-20 13:50) [12]

iNew © (20.08.03 13:40) [11]
Неплох, но другой и лишняя нагрузка на систему


 
panov   (2003-08-20 14:18) [13]

>Anatoly Podgoretsky © (20.08.03 13:50) [12]

Загрузка процессора минимальная в таком цикле.


 
Anatoly Podgoretsky   (2003-08-20 14:30) [14]

Но больше по сравнению с таймером, минимальная когда Sleep(10 мин);



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
7-11000
K-sergey
2003-06-19 15:14
2003.09.04
Поднятие трубки


6-10860
Dixx
2003-07-01 13:16
2003.09.04
Сокс-подключение через прокси.


4-11013
Nick Denry
2003-07-05 20:49
2003.09.04
9x и wm_devicechange. в SDK написано -нет такой мессаги в 9x


3-10585
Алексей Петухов
2003-08-14 13:59
2003.09.04
Вычисляемое поле в BDGrid


14-10981
Viktor Kushnir
2003-08-13 15:16
2003.09.04
Узкие места





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский