Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2023, 11:32   #11
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

cs12, вроде - это значит немножко беременна...
macomics вне форума Ответить с цитированием
Старый 30.04.2023, 11:33   #12
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
По умолчанию

macomics, ну вот я оригинальный код вставил - это не попробовал? Или может я не догнал, что имеется в виду...

upd:попробовал через TStreamreader Readline - тоже работает так же проблемно, даже если файл каждую секунду считывать
cs12 вне форума Ответить с цитированием
Старый 30.04.2023, 11:48   #13
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Попробуйте вот это:
Код:
procedure TLog.ReadLog;
var
  hFile: LongInt;
  hMap: THandle;
  Text: PChar;
begin
  hFile := 0;
  hMap  := 0;
  if FileExists(LogName)
    then hFile := FileOpen(LogFile, fmOpenReadWrite or fmShareDenyNone)
    else hFile := FileCreate(LogFile);
  if hFile <> 0 then begin
    hMap := CreateFileMapping(hFile, nil, PAGE_READWRITE, 0, 0, nil);
    if hMap <> 0 then begin
      Text := MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
      if Text <> nil then begin
        sl.Text := Copy(Text, 1, Length(Text));
        UnMapViewOfFile(hMap);
      end;
      CloseHandle(hMap);
    end;
    CloseHandle(hFile);
  end;
  writeln('loaded');
end;
macomics вне форума Ответить с цитированием
Старый 30.04.2023, 12:40   #14
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
По умолчанию

macomics, а он не может работать в UTF-8, да?
cs12 вне форума Ответить с цитированием
Старый 30.04.2023, 13:30   #15
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
По умолчанию

Фигня какая-то. Я перенёс finally с FreeAndNil(fs) в конец проедуры считывания, чтобы даже в случае ошибки она очищалась, поменял в основном потоке TThreadedQueue на TThreadList<T> и обернул в try ..except и почему-то всё работает как часы. Хотя except вообще не отрабатывает - ошибок нет. Помогла ли смена очереди на список - тоже хз. Сейчас всё работает через LoadFromStream. Что-то мне подсказывает, что проблема была в неоткрывшемся потоке fs, но ранее я запихивал его в бесконечный цикл с секундным ожиданием в случае ошибки и до тех пор, пока Assigned не вернёт true - не работало. Я так и не понял, в чём проблема.

В интернетах пишут, что до XE2 upd4 была какая-то проблема с PopItem у очередей, но у меня вообще delphi 11 (alexandria), одна из последних, а проблема была лет 10 назад. Кстати говоря, PopItem на пустой очереди в моей версии не возвращает ничего, даже если очередь пополняется, то есть просто поток зависает на ожидании. Может всё-таки ничего не исправили

Последний раз редактировалось cs12; 30.04.2023 в 13:35.
cs12 вне форума Ответить с цитированием
Старый 30.04.2023, 14:07   #16
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от cs12 Посмотреть сообщение
macomics, а он не может работать в UTF-8, да?
cs12, так преобразуйте. Я же только пример привел. Можно вместо Copy написать функцию типа MultiByteToWideChar.
macomics вне форума Ответить с цитированием
Старый 06.05.2023, 22:42   #17
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
По умолчанию

Проблема была (скорее всего) в том, что библиотека даже при явном использовании внутри себя отдельных потоков TTask не устанавливала многопотоковый режим. Вручную в begin/end добавил IsMultiThread := true - вроде помогло
cs12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TFileStream cb251132 Общие вопросы Delphi 16 06.10.2020 14:12
TFileStream Baburek C++ Builder 3 04.07.2013 10:13
Работа со списками + виснет byshido Общие вопросы C/C++ 1 04.01.2011 19:40
Простая работа с потоками TFileStream exzibit Общие вопросы Delphi 2 27.02.2010 01:12
TFilestream UnD)eaD)Snake Win Api 1 27.09.2007 21:22