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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация буфера данных 
:(
    Опции темы
Stratus
Дата 20.12.2011, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Колеги 

Возник вопрос корректной организации буфера данных.

Суть следующая организовать очередь которая будет получать данные данные от источника а затем раздавать подписчикам и все это в отдельном потоке.

Пытаюсь организовать это следующим образом.

Код

    class Program
    {
        static internal Queue<int> Data = new Queue<int>();
        static private Thread DataThread1;
        static bool Stop = false;

        
        static void Main(string[] args)
        {
            ThreadQuotes = new Thread(new ThreadStart(ScanData));
            ThreadQuotes.Name = "DataThread1";
            ThreadQuotes.Start();
        }


        static public void SendIQuotes(int Digit)
        {
            Monitor.Enter(Data);
                StartTime = DateTime.Now;
                    Data.Enqueue(Digit);
                EndTime = DateTime.Now;
            Monitor.Exit(Data);
        }

        static private void ScanQuotes()
        {
            while (!Stop)
            {
                if (Quotes.Count > 0)
                {
                    if (Monitor.TryEnter(Data))
                    {
                        int CurrentQuote = Data.Dequeue();
                        Monitor.Exit(Data);
                        //здесь можно реализовать вызов метода отправки подписчикам
                    }
                }
                else Thread.Sleep(1);
            }
        }
    }


Вопрос:
1) Какой поток пытается усыпить Thread.Sleep(1), поток DataThread1 или основной поток?
2) Как болеее эффективно организовать данную конструкцию чтобы не приостанавливать потоки?
PM MAIL   Вверх
Stratus
Дата 21.12.2011, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Неужели никто с этим не сталкивался?
PM MAIL   Вверх
jonie
Дата 22.12.2011, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



.net4 содержит класс ConcurrentQueue. Используйте лучше его чем писать велосипеды... ну или кнута почитайте, а потом рихтера.

а вот кстати для вас (судя по названиям) более подходящий вариант: http://code.google.com/p/disruptor/?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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