![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
имеет ли смысл задержка?
brother © (2008-05-29 09:34:00)на onClose:
Memo1.Lines.SaveToFile(extractfilepath(Application.ExeName)+'auto_copy_ftp_log.txt');
sleep(500);
задумался...
Stas (2008-05-29 17:43:00) [1]brother © (29.05.08 09:34)
>имеет ли смысл задержка?
Если эта задержка у девшки... )))
Может лучше лог писать по ходу появления событий, на которые добавляются строки в MEMO1 ?
Т.к. при аварийном закрытии программы потеряете лог!
Kolan (2008-05-29 15:24:00) [2]> чтоб наверняка ))
Забыл «контрольку» :)
I := 0;
while (I
TForumHelp (2008-05-29 11:10:00) [3]
> задумался...
смеялся... :)
попробуй построчно записывать, когда запишешь последнюю, сделай переменную какую-нибудь = True.
var
i: Integer;
done: Boolean;
begin
i := -1;
done := False;
While not done do begin
Application.ProcessMessagess;
Inc(i);
//записывай в файл строку Memo1.Lines[i]
End;
end;
в событии OnCloseQuery:
begin
CanClose := done;
If not done then ShowMessage('Пишется строка ' + IntToStr(i) + '! Подождите...');
если так переживаешь! =)
brother (2008-05-29 10:20:00) [4]по идее место позволяет, то прога не закроется пока не запишет (в моем случае)... тогда sleep не нужен конечно )
Palladin (2008-05-29 10:04:00) [5]
> Но писать лог лучше сразу в файл.
об том и речь...
ANB (2008-05-29 10:03:00) [6]
> Неа, не будет, если на винте осталось только 15Гб. Твоему
> логу тупо нехватит места. Или потому, что ты где-то напортачил
> с данными и получил AV. Или потому, что пользователь снял,
> к чертям собачьим, задачу. Или reset нажал, к тем же чертям.
>
Тады и приложение не закроется.
Но писать лог лучше сразу в файл. Причем для большей безопасности, если позволяет критичность к скорости, лучше еще и принудительно сбрасывать информацию из буфера. Мона тупо его кажный раз открывать и закрывать.
Palladin (2008-05-29 09:58:00) [7]
> будет ли записан файл?
Неа, не будет, если на винте осталось только 15Гб. Твоему логу тупо нехватит места. Или потому, что ты где-то напортачил с данными и получил AV. Или потому, что пользователь снял, к чертям собачьим, задачу. Или reset нажал, к тем же чертям.
А хранить лог в памяти приложения и делать дамп только при событии OnClose какой то формы (или чего другого) это более чем странно.
ANB (2008-05-29 09:52:00) [8]
> система пишет файл гигов 20... в это время моя прга пишет
> лог ПРИ ЗАКРЫТИИ... Спрашиваю... будет ли записан файл?
Будет. SaveToFile - неасинхронный метод. Если лог здоровый - то программа просто будет долго завершаться и всех делов.
brother (2008-05-29 09:50:00) [9]система пишет файл гигов 20... в это время моя прга пишет лог ПРИ ЗАКРЫТИИ... Спрашиваю... будет ли записан файл?
Palladin (2008-05-29 09:48:00) [10]
> Thrasher © (29.05.08 09:46) [4]
а с какой целью такая свистопляска с безсмысленными назначениями CanClose значений если в конце концов оно все равно будет True ?
clickmaker (2008-05-29 09:48:00) [11]> Если боишься, что данные не запишутся
try
Memo1.Lines.SaveToFile(extractfilepath(Application.ExeName)+'auto_copy_ftp_log.txt');
Memo1.Lines.SaveToFile(extractfilepath(Application.ExeName)+'auto_copy_ftp_log.txt');
Memo1.Lines.SaveToFile(extractfilepath(Application.ExeName)+'auto_copy_ftp_log.txt');
except
Memo1.Lines.SaveToFile(extractfilepath(Application.ExeName)+'auto_copy_ftp_log.txt');
end;
чтоб наверняка ))
Thrasher (2008-05-29 09:46:00) [12]Нет, не имеет. Если боишься, что данные не запишутся, то ставь обработчик на OnCloseQuery:
CanClose:=false;
try
Memo1.Lines.SaveToFile(....);
except
ShowMessage('Ошибка при записи лога! ');
CanClose:=True;
end;
CanClose:=True;
Palladin (2008-05-29 09:40:00) [13]а как соотносится скорость записи на винт и ввод потока в спячку на пол секунды? а почему на пол секунды, а не на секунду или на час?
brother (2008-05-29 09:38:00) [14]думал о скорости записи на винт при интенсивной нагрузке онного...
Palladin (2008-05-29 09:35:00) [15]интересно, а о чем ты думал, когда писал это?