Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22

Queue.CopyTo в массив меньшей длины так как длина быстро нарастает

16.01.2016, 21:40. Показов 731. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Прошу помощи или совета.
Поток 1 получает данные непрерывно сохраняет их в очередь, поток 2 редко случайно.
Получив данные поток 2 создает условия, передает условия в поток 1 и поток 1 сверяет все новые данные с этим условием, так же поток 2 запускает поток 3 который проверит всю очередь созданную потоком 1 на соответствие этому условию - вдруг пропустил.
После создания условия очередь следующая за созданием условия не должна рассматриваться потоком 3, но за эти микросекунды она может увеличится на 3 а то и на 10 записей, очередь нужна для других вызовов потока 2, остановить нельзя. (Существует условия отчисти очередей-затишье) Мое решение Queue.CopyTo
когда поток 2 сформирует условие очередь будет скопирована, но как отбросить лишнее загруженное в очередь после, даже за время определения длинны очереди она может увеличиться первая очередь получив условие получив выполняющие это условие данные не помещает их в очередь. поток один нельзя останавливать.
try catch сильно замедлит выполнение, пока случайно увеличение массива для копирование очереди не совпадет с очередью

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
         Queue<int> myQueue = new Queue<int>();
 
            for (int ii=0;ii<5;ii++)
            {
                myQueue.Enqueue(ii);
            }
 
          int [] myMassivwQueue= new int[3];
 
         //   try
         //   {
                myQueue.CopyTo(myMassivwQueue, 0);
         //   }
        //    catch
         //   {
 
         //   }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2016, 21:40
Ответы с готовыми решениями:

Минимальная длина пароля установлена в 5. Найти способ установить пользователю пароль меньшей длины
Минимальная длина пароля установлена в 5. Найти способ установить пользователю пароль меньшей длины.

Создайте два одномерных массива. Второй массив в три раза меньшей длины. Создайте коллекции из элементов масси
Создайте два одномерных массива. Второй массив в три раза меньшей длины. Создайте коллекции из элементов массива. Вставьте элементы второго...

Дан массив из n слов произвольной длины (длина слова не превышает 80 символов)
Всем привет! Помогите пожалуйста. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов...

5
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
16.01.2016, 22:28
Например, использовать блокировку (для синхронизации). lock
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22
16.01.2016, 22:34  [ТС]
спасибо, лок используется для снятия и помещения, enqueue dequeue первый поток нельзя останавливать еще и на формирование копии для потока 3, там все сделано что бы она как можно быстрее освобождалась
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
16.01.2016, 22:39
Я не знаю тонкостей Вашей задачи. Если очередь очищается только в особые моменты, то поток 2 может передать в поток 3 количество элементов, которые надо обрабатывать.
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 22
17.01.2016, 23:05  [ТС]
Здравствуйте еще раз. Поэкспериментировал и обнаружил существенное незнание языка, помогите пожалуйста.
Вопрос теперь звучит по-другому.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#c#
  int[] myMassivwQueue = new int[myQueue.Count];
 
//создаю массив для копирования размером равной очереди на момент создания
 
  lock (Mylockercopy)
                                {
                                    myQueue.CopyTo(myMassivwQueue, 0);
                                }
//Копирую очередь в массив, тут бывает исключение когда очередь уже наросла
for (int kkk = 0; kkk < myMassivwQueue.Length; kkk++)
                                {
//работаю с очередью
Console.WriteLine(myMassivwQueue[kkk]);
}
Array.Clear(myMassivwQueue, 0, myMassivwQueue.Length);
                                myMassivwQueue = null;
//удаляю копию
1) подскажите как написать «одной строкой» создание и копирование очереди что бы созданный массива был равен размеру очереди в момент копирования. Вида такой фантастической строки:

C#
1
2
3
4
5
6
7
8
9
  int[] myMassivwQueue = new int[myQueue.CopyTo(myMassivwQueue, 0),myQueue.Count];
 
 
//если  я включу объявления массива внутрь lock
  lock (Mylockercopy)
                                {
int[] myMassivwQueue = new int[myQueue.Count];
                                    myQueue.CopyTo(myMassivwQueue, 0);
                                }
то цикл не будет его видеть, объявлять где то раньше нельзя так как размер не известен, тип array не подходит так как данные с многочисленными полями на которые уже объявлены классы и схемы и разобрать еще раз долго для задачи
2) правильно я удаляю копию? Много времени занимает выполнение такого действия как Clear и =null
3) в начале я пытался добиться что бы в копию не попали данные из очереди после получения события в потоке 2, этот вопрос снимается, это можно учесть и отбросить простыми сравнениями
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
17.01.2016, 23:49
C#
1
int[] myMassivwQueue = myQueue.ToArray();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2016, 23:49
Помогаю со студенческими работами здесь

Все слова, длина которых больше в 2 раза длины слова max длины, заменить на слово min длины
подскажите пожалуйста в чем тут ошибка {Дан текст. Все слова, длина которых больше в 2 раза длины слова минимальной длины,...

Из двух упорядоченных одномерных массивов длины К и Н сформируйте одномерный массив размером К+Н упорядоченный так же как и исходный
Из двух упорядоченных одномерных массивов длины К и Н сформируйте однормерный массив размером К+Н упорядоченный так же как и исходный.

Почему CopyTo копирует ссылку на массив, а не сам массив?
Здравствуйте! Подскажите, пожалуйста, почему в приведённом ниже коде метод CopyTo копирует ссылку на массив, а не сам массив? И почему...

Даны две строки, урезать бОльшую строку до длины меньшей
Даны две строки, урезать большую строку до длины меньшей. Надеюсь на вашу помощь. За ранее спасибо!

Написать программу на паскале нахождения периметра ромба один из углов которого равен а (острый) а длина меньшей диагонали равна в
Помогите пожалуйста


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru