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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 22:01   #1
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию Логгирование, несколько потоков

Постараюсь сформулировать вопрос чётко.

Есть класс, отвечающий за логирование. Он записывает данные в текстовой файл:

Код:
    class TxtLogger : ILogger
    {
        protected FileStream f1;
        protected string FileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Folder\\Output1.txt";
        protected string CurrentLogText;
        protected StreamWriter output;
        protected Queue lgrMsg = new Queue();

        public void Log(string message, MessageType messageType)
        {
            CurrentLogText = "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType;
            lgrMsg.Enqueue(CurrentLogText);

            f1 = new FileStream(FileName, FileMode.Append);
            output = new StreamWriter(f1);

            
            while (lgrMsg.Count > 0)
            {
                output.WriteLine(lgrMsg.Dequeue());
            }
            output.Close();
            f1.Close(); 
        }
    }
Если метод этого класса вызывается в одном потоке (много раз), всё работает хорошо. Но как только я пытаюсь вызвать его из двух потоков одновременно, выскакивает ошибка (exeption), которая говорит, что текстовой файл используется другим процессом.
Я понимаю, что нельзя одновременно записывать в один файл из двух потоков, поэтому организовал очередь (Queue). Но проблема не решилась.

Прошу помочь, а то уже долго мучаюсь. Спасибо!
pa6kevi4 вне форума Ответить с цитированием
Старый 12.06.2010, 21:08   #2
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Есть идеи?
pa6kevi4 вне форума Ответить с цитированием
Старый 12.06.2010, 21:57   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Синхронизировать нужно очередь или сам вывод в файл посредством lock
pu4koff вне форума Ответить с цитированием
Старый 12.06.2010, 22:32   #4
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Радость

Спасибо за совет, если что отпишу
pa6kevi4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Вопрос] IdHttp в несколько потоков TilerDerton Работа с сетью в Delphi 3 22.09.2009 22:14
Загрузка файла в несколько потоков Joe_Tribbiani Работа с сетью в Delphi 12 11.04.2009 12:06
Несколько потоков Adm Общие вопросы Delphi 13 18.01.2008 20:04