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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2014, 12:20   #1
qZED
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 26
По умолчанию Логирование

Добрый день!
Есть несколько потоков - читают из COM порта. Подскажите как реализовать логирование. Дело тут вот в чем: поток считал данные и вызывает процедуру для записи данных в файл. - дак вот поток работает быстрее чем запись в файл и происходит ошибка ввода выводу - файл занят. Подскажите что можно использовать для вывода протокола в файл?
qZED вне форума Ответить с цитированием
Старый 12.01.2014, 12:22   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

в сети готового вагон и телега, вы хоть поисковиками то попробуйте воспользоваться
eval вне форума Ответить с цитированием
Старый 12.01.2014, 12:29   #3
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
Вопрос

Цитата:
Сообщение от qZED Посмотреть сообщение
Добрый день!
Есть несколько потоков - читают из COM порта. Подскажите как реализовать логирование. Дело тут вот в чем: поток считал данные и вызывает процедуру для записи данных в файл. - дак вот поток работает быстрее чем запись в файл и происходит ошибка ввода выводу - файл занят. Подскажите что можно использовать для вывода протокола в файл?
Потоки сохраняют данные в один общий файл, или у каждого из них свой отдельный?
Streletz вне форума Ответить с цитированием
Старый 12.01.2014, 12:35   #4
qZED
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Потоки сохраняют данные в один общий файл, или у каждого из них свой отдельный?
Файлы отдельные. Пробовал Log4D - дак файл оказывается тоже заблокированным. Если делать Sleep в потоке после записи в файл то работает нормально.
А еще поясню: перед записью файл открываю заново потом закрываю.

AssignFile(F, sFileName);
if FileExists(sFileName) then
Append(F)
else
ReWrite(F);

Последний раз редактировалось qZED; 12.01.2014 в 12:40.
qZED вне форума Ответить с цитированием
Старый 12.01.2014, 12:39   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

делают по разному
но надо организовать очередь для логов...
http://www.bing.com/search?q=delphi+...s=bs&form=QBRE
eval вне форума Ответить с цитированием
Старый 12.01.2014, 12:44   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Накапливай данные в TMemoryStream и скидывай большие блоки на HDD. Это должно уменьшить нагрузку на HDD, и возможно исключить ошибку.
doktor255 вне форума Ответить с цитированием
Старый 12.01.2014, 12:48   #7
qZED
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 26
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Накапливай данные в TMemoryStream и скидывай большие блоки на HDD. Это должно уменьшить нагрузку на HDD, и возможно исключить ошибку.
Да я уже думал об этом. А если программа вдруг зависнет? Логи потеряются. Причем проверил сейчас на слабом ПК (хотя откуда они сейчас слабые то..) - программа пишет в файл отлично! Приоритет потоку что ли выставить меньше...
qZED вне форума Ответить с цитированием
Старый 12.01.2014, 12:54   #8
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Писал в своё время логер UDP, и тоже стояла задача логирования с разбивкой по файлам. Я единожды открывал файл для записи, и закрывал по закрытию программы. Народ на глюки пока не жаловался.
doktor255 вне форума Ответить с цитированием
Старый 12.01.2014, 12:56   #9
qZED
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 26
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Писал в своё время логер UDP, и тоже стояла задача логирования с разбивкой по файлам. Я единожды открывал файл для записи, и закрывал по закрытию программы. Народ на глюки пока не жаловался.
Во сейчас попробую так! Спасибо.

Проверил...А как буфер сбросить? А то не закрытый файл при открытии в FAR - не показывает внутренности...

Последний раз редактировалось qZED; 12.01.2014 в 13:01.
qZED вне форума Ответить с цитированием
Старый 12.01.2014, 13:02   #10
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
А как буфер сбросить?
Код в студию...

Последний раз редактировалось Streletz; 12.01.2014 в 13:06.
Streletz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
python логирование Lemon2009 PHP 1 11.09.2012 15:59
Логирование EventLog mrChester Общие вопросы .NET 7 18.04.2012 09:55
Логирование запуска программы Dima DDM Общие вопросы Delphi 0 05.08.2011 15:48