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

Поиск:

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


Новичок



Профиль
Группа: Участник
Сообщений: 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)//лок для предотвращения одновременной записи в файл разными потоками
                {
                    TalkingClock sender = stateInfo as TalkingClock;
                    using (StreamWriter sw = new StreamWriter("D:\\Variables.txt", true, Encoding.ASCII))
                        sw.Write(sender.name);
                }
            }
            catch (FileNotFoundException e)
            {
                Console.WriteLine(" не найден файл ");
            }
            catch (IOException e)
            {
                Console.WriteLine(" дргуая ошибка на ввод - вывод ");
            }
        }
    }
}

во время работы программы : 
если открываешь файл, то видишь статическую картинку на момент открытия, что записалось
например 
PetrAlexAlexPetrAlexAlex
закрыл , подождал, открыл 
PetrAlexAlexPetrAlexAlexPetrAlexAlexPetrAlexPetrAlexAlexPetrAlexPetrAlexAlexPetr AlexAlexPetrAlexAlexPetrAlexPetrAlexAlexPetrAlexAlex

а как сделать так , чтобы каждую запись сделать отдельной строкой с указанием времени
( чтобы понять, что это было записано вовремя - такое-то )

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

подскажите пожалуйста!!!
PM MAIL   Вверх
spbsmile
Дата 27.3.2012, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



с минимизацией , Бог с ней. 

мне надо сейчас главное , чтобы 
1.в каждой новой строке запись со временем.
2. дозапись файла.  

1.
Код

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("D:\\Variables.txt", true, Encoding.ASCII))
                       //sw.Write(sender.name);
                       sw.WriteLine(sender.name + str);
                }
 
правильное решение?
output : 
Alex
27.03.2012 3:48:08
Petr
27.03.2012 3:48:08
Alex

27.03.2012 3:48:11
Petr

27.03.2012 3:48:13
Alex


27.03.2012 3:48:14
Alex



27.03.2012 3:48:17
Petr


27.03.2012 3:48:18
Alex




27.03.2012 3:48:20
Petr



27.03.2012 3:48:23
Alex

2.
Код

private String read(File f) throws IOException{
        FileInputStream fis=null;
        StringBuilder sb=new StringBuilder();
        try{
            fis=new FileInputStream(f);
            int read=0;
            while((read=fis.read())!=-1){
                sb.append((char)read);
            }
        } finally{
            if(fis!=null){
                fis.close();
            }
        }
        return sb.toString();
    }
 метод дозаписи в файл на java. помогите его перезаписать на с#. я его применю к sw.
вообще я полностью перезаписал мою задачу на java. передав MyFileWriter как пераметр в поток. и храня его в отдельном классе. но я не осилю переписать её на с#. 

или есть ли люди готовые за небольшую плату перезаписать программу с java на с# & ( или альтруисты)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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