Минимизация

Тема в разделе ".NET", создана пользователем spbsmile, 27 мар 2012.

  1. spbsmile

    spbsmile Гость

    Код (LotusScript):
    using System;
    using System.IO;
    using System.Text;
    using System.Threading;

    namespace ConsoleApplication123
    {
    public class InnerClassTest
    {
    public static void Main(String[] args)
    {

    TalkingClock clock = new TalkingClock(3000, true, "Alex");
    TalkingClock clock2 = new TalkingClock(5000, true, "Petr");
    clock.Start();
    //clock.join();
    clock2.Start();

    Console.ReadLine();
    }
    }

    class TalkingClock
    {
    private Timer t;
    private TimerPrinter listener;

    public TalkingClock(int interval, Boolean beep, String name)
    {
    this.interval = interval;
    this.beep = beep;
    this.name = name;
    }

    public void Start()
    {
    listener = new TimerPrinter();
    t = new Timer(new TimerCallback(listener.CheckStatus), this, 0, interval);
    }

    void OnTick()
    {
    }

    private int interval;
    private Boolean beep;
    public String name;
    }
    class TimerPrinter
    {
    static object fileLocker = new object();

    // This method is called by the timer delegate.
    public void CheckStatus(Object stateInfo)
    {
    try
    {
    lock (fileLocker)//лок для предотвращения одновременной записи в файл разными потоками
    {
    DateTime now = DateTime.Now;
    String str = now.ToString();

    TalkingClock sender = stateInfo as TalkingClock;
    sender.name = sender.name + "\r\n";
    using (StreamWriter sw = new StreamWriter(File.Open("D:\\Variables.txt", FileMode.Append, FileAccess.Write)))

    sw.WriteLine(sender.name + str);
    }
    }
    catch (FileNotFoundException e)
    {
    Console.WriteLine(" не найден файл ");
    }
    catch (IOException e)
    {
    Console.WriteLine(" другая ошибка на ввод - вывод ");
    }
    }
    }
    }
    Вся работа с файлом внутри блокировки. Этот раздел надо минимизировать.

    ?? как вынести запись файла за блокировку?? что я тогда буду блокировать ??
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Полагаю, вполне достаточно будет оставить внутри lock-блока только саму запись, все остальное (что идет до using(StreamWriter...)) надо вынести.
    Да, вот эта строчка:
    Код (Text):
    sender.name = sender.name + "\r\n";
    мне не нравится категорически.
     

Поделиться этой страницей