Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> минимизация 
:(
    Опции темы
spbsmile
Дата 27.3.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.7.2011

Репутация: нет
Всего: нет



есть программа с потоками,
которая выводит с помощью двух потоков имена. с привязкой со временем. 
вот .
Код

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(" другая ошибка на ввод - вывод ");
            }
        }
    }
}


у меня работа с фалом внутри блокировки. мне надо это минимизировать.

как это можно сделать?

Добавлено через 9 минут и 52 секунды
мне надо ввод файла вынести за блокировку.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.