powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не срабатывает отключение от базы пока не закрыта форма.
24 сообщений из 99, страница 4 из 4
Не срабатывает отключение от базы пока не закрыта форма.
    #39498908
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiYuRockпропущено...
А разница есть. Если finally будет снаружи и в этом блоке произойдет исключение (что вполне вероятно), то оно окажется необработанным со всеми вытекающими. Что гораздо хуже хотя бы потому, что в лог оно не попадет.

Видишь ли, в чем дело - при записи в лог с ненулевой вероятностью тоже может возникнуть исключение, остающееся необработанным с теми же вытекающими.
Не в моем случае.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498942
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiВидишь ли, в чем дело - при записи в лог с ненулевой вероятностью тоже может возникнуть исключение, остающееся необработанным с теми же вытекающими.
Это понятно. Но на что-то надо полагаться, что оно точно работает. Например, хотя бы на то, что винт не посыпался, что память не битая, что функция логирования не вызывает исключений.

Это раз, а два - в этом случае упасть может только при записи в лог, а если наоборот - то и при записи в лог, и потом еще в finally.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498946
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanНе в моем случае.
Думаю, в случае функции логирования допустима даже такая конструкция
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  except end; 
end;
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498948
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockwadmanНе в моем случае.
Думаю, в случае функции логирования допустима даже такая конструкция
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  except end; 
end;


Собственно так и делается: https://github.com/wadman/wthread/blob/master/wlog.pas
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498966
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanСобственно так и делается: https://github.com/wadman/wthread/blob/master/wlog.pas
Оффтоп:
1. А чё ты не даёшь пустую строку в лог добавить? Имхо лишняя проверка. К тому же не запишется в лог, например, значение строковой переменной, если она пустая строка, это может быть важно.
2. Формат даты в логах я у себя уже много лет назад переделал с dd.mm.yyyy на yy.dd.mm - экономия 2 байтов в каждой строке это не мало, когда логи занимают десятки/сотни гигабайт, это ~5-10% от этого размера.
3. Использование системной очереди сообщений, как видно, используется. Я бы для такого свою очередь сделал. Но это дело вкуса.
4. Ну и самое страшное (так да немного не так)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
function OpenLog: boolean;
begin
    result := false;
    try
        AssignFile(log, WLogFileName);
        if (FileExists(WLogFileName))and(not WLogClearOnStart) then begin
            Append(log);
            if FirstLine then begin
                WriteLn(log);
                FirstLine := false;
            end;
        end else begin
            WLogClearOnStart := false;
            Rewrite(log);
        end;
        result := true;
    finally

    end;
end;

function CloseLog: boolean;
begin
    result := false;
    try
        CloseFile(log);
        result := true;
    finally

    end;
end;

function AddToLog(const DT: TDateTime; const Text: string): boolean;

    function ClearText(const AText: string): String;
    var i: integer;
    begin
        result := AText;
        for I := 1 to Length(result) do
            if Ord(result[i]) < 32 then
                result[i] := '.';
    end;

begin
    result := false;
    try
        WriteLn(log, Format('%s : %s', [FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', DT), ClearText(Text)]));
        result := true;
    finally
    end;
end;

procedure TLogThread.WMErase(var Msg: TThreadMessage);
var f: File;
begin
    if FileOpened then
        FileOpened := not CloseLog;
    try
        if (not FileOpened) and (FileExists(WLogFileName)) then begin
            AssignFile(f, WLogFileName);
            Erase(f);
        end;
    finally

    end;
end;

...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498967
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockс dd.mm.yyyy на yy.dd.mm
на yy.mm.dd
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498979
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЯ бы для такого свою очередь сделал.
Включается автоматом на никсах, а в винде по условию компиляции (там inc есть).
Остальное - мелочи. Особенно про пустую переменную - на кой она нужна, если её не идентифицировать названием?
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498989
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanОстальное - мелочи.
Ну как сказать. finally вместо except это описка, да, но отнюдь не мелочь)
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39498991
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanна кой она нужна, если её не идентифицировать названием?
Накой эту проверку делать? Если её идентифицировать названием - то эта проверка и так будет бесполезна - всегда будет True.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499028
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockwadmanОстальное - мелочи.
Ну как сказать. finally вместо except это описка, да, но отнюдь не мелочь)
В чем разница?
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499036
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanВ чем разница?
В чем разница между finally и except относительно wlog.pas?
Файл может остаться висеть открытым вечно, например, в случае исключения при записи.
Память не будет освобождаться, например, в TLogThread.WMLog при любом исключении.
Да ну блин, ты что, травишь? Это логическая ошибка, подправь и закоммить, люди ж пытаются пользоваться вроде. Впрочем, дело твоё.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499038
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чем разница между
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  except end; 
end;


и
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  finally end; 
end;


?
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499072
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanВ чем разница между
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  except end; 
end;


и
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  finally end; 
end;


?

Разница в том, что вторая конструкция не имеет смысла. Если при записи возникнет исключение, оно будет передано наверх, в отличие от первого случая, когда оно будет заглушено.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499078
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  finally end; 
end;


это эквивалентно
Код: pascal
1.
2.
3.
4.
procedure Log( const S: String );
begin
  // Ну а здесь добавление в очередь записи в лог
end;
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499148
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanСобственно так и делается: https://github.com/wadman/wthread/blob/master/wlog.pas
Тоже оффтоп:
Код: pascal
1.
2.
3.
function InitLogs: boolean;
begin
    WLogFileName := ChangeFileExt(ParamStr(0), '.log');



Ограниченным учёткам логов не нужно? :)
IMHO на винде имеет смысл писать в %AppData%\%AppName%[\Logs].
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499152
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё:
Код: pascal
1.
2.
3.
  WriteLn(log, Format('%s : %s', [FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', DT), ClearText(Text)]));
  flush(log); // иначе есть неиллюзорный шанс недосчитаться записей в логах, при вылете из-за OutOfMemory или AV
  result := true;
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499157
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpОграниченным учёткам логов не нужно? :)
Разработчику это не нужно, т.к. проект запускается из папки, куда запись разрешена.
Но если что, это переменная, заполняемая умолчательным значением и её можно менять.

От флеша я по каким-то причинам отказался в свое время в результате экспериментов.

schiЕсли при записи возникнет исключение, оно будет передано наверх, в отличие от первого случая, когда оно будет заглушено.
Ок, понял. Меня именно такое поведение и устраивает.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499183
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanМеня именно такое поведение и устраивает.
Когда память не освобождается и/или файл открытый остается висеть? А так же прекращение работы потока логирования на первом же исключении при попытке записи (например, файл монопольно занят копированием)? Ну, ок.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499694
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

Промолчу про качество кода...
То, что соединение остаётся открытым - нормально.
Более того, так задумано - это называется Connection Pooling.
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499698
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BБолее того, так задумано - это называется Connection Pooling.
кем задумано?
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499793
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499803
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B http://www.google.ru/search?ie=UTF-8&hl=ru&q=connection pooling
Я знаю, что это такое. Откуда вообще взялась мысль, что ТС это задумывал?
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39499928
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanВ чем разница между
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  except end; 
end;


и
Код: pascal
1.
2.
3.
4.
5.
6.
procedure Log( const S: String );
begin
  try
    // Ну а здесь добавление в очередь записи в лог
  finally end; 
end;


?"Ну вы, блин, даете!!!" (с)
...
Рейтинг: 0 / 0
Не срабатывает отключение от базы пока не закрыта форма.
    #39500038
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЯ знаю, что это такое. Откуда вообще взялась мысль, что ТС это задумывал?
не задумывал. Вообще код переписан,работает в продуктиве. Хочется кому-нибудь приватно показать, на предмет улучшений.
...
Рейтинг: 0 / 0
24 сообщений из 99, страница 4 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не срабатывает отключение от базы пока не закрыта форма.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]