Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
1

Как реализовать очередь нескольких потоков?

09.10.2014, 10:51. Показов 2870. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, коллеги! Посоветуйте, как мне реализовать очередь нескольких потоков? Мне нужно сделать так, чтобы после выполнения одного потока запускался следующий. После успешного завершения следующего - запускался третий и.т.д.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2014, 10:51
Ответы с готовыми решениями:

Как реализовать очередь потоков
Всем привет. Есть такая задача: надо реализовать очередь потоков. В один момент времени может...

Как правильно реализовать очередь потоков
Доброго времени суток! Для работы пишу такую программу: форма содержит группу чекбоксов, с...

Как создать очередь потоков
Есть ли в Java класс, в который можно добавить N потоков, потом одним действем их запустить, и что...

Как дождаться завершения нескольких потоков
Добрый день. Столкнулся с такой проблемой: в методе main() создается n одинаковых потоков, каждый...

10
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
09.10.2014, 10:57 2
Лучший ответ Сообщение было отмечено BroDIK как решение

Решение

Код
var task = Task.Factory.StartNew(..)//первый пошел
var task2 = task.ContinueWith(...)//второй пошел
var task3 = task2.ContinueWith(...)//третий пошел
1
Эксперт .NET
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
09.10.2014, 10:59 3
Здравствуйте!
А зачем вам так делать? Ведь если операции должны выполняться строго одна за другой, а не параллельно, то зачем запускать новые потоки? Можно ведь все три операции выполнить последовательно в одном потоке и прилично сэкономить на ресурсах для создания и запуска нового потока.
1
40 / 40 / 13
Регистрация: 09.07.2014
Сообщений: 116
09.10.2014, 13:17 4
с помощью ключевого слова await в методе, например, все потоки будут запускаться поочередно.

Нет желания писать код, но у меня скриншот остался когда я еще игралась с потоками
Миниатюры
Как реализовать очередь нескольких потоков?  
1
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825
09.10.2014, 13:18 5
Цитата Сообщение от kolorotur Посмотреть сообщение
Здравствуйте!
А зачем вам так делать? Ведь если операции должны выполняться строго одна за другой, а не параллельно, то зачем запускать новые потоки? Можно ведь все три операции выполнить последовательно в одном потоке и прилично сэкономить на ресурсах для создания и запуска нового потока.
kolorotur, прав. У меня была проблема когда я не мог ставить главный поток на паузу, т.к форма залипала. Из за этого делил на 2 потока(1 форма, 2 функционал), но в вашем вопросе я не вижу ничего подобного
0
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
09.10.2014, 14:14  [ТС] 6
Цитата Сообщение от kolorotur Посмотреть сообщение
А зачем вам так делать?
Если ТС написал:
Цитата Сообщение от BroDIK Посмотреть сообщение
Мне нужно сделать так
значит так надо Я извиняюсь, наверное, нужно было сразу обозначить суть проблемы. Дело в том, что я работаю с устройством, посылая ему команды. И мне никак нельзя посылать команды параллельно.
Цитата Сообщение от MakcPletnev Посмотреть сообщение
т.к форма залипала
И тем более, я делаю приложение на WinForms. Для этого мне и нужны потоки. Вариант Defazze я уже попробовал - работает Теперь попробуем через await. Чуть позже напишу о результатах.

Не по теме:

Ставлю "Спасибо" в этой теме людям, которые без всяких вопросов дали ответ по делу :)

0
Эксперт .NET
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
09.10.2014, 14:27 7
Цитата Сообщение от BroDIK Посмотреть сообщение
Если ТС написал, значит так надо
В большинстве случаев ТС хочет решить определенную задачу, а не просто поиграться с синтаксисом ради развлечения.
Зачастую путь к решению задачи выбирается неправильный или слишком долгий и сложный: если ТС для задачи по перевозке грузов выбрал сани и теперь спрашивает, какую использовать смазку, чтобы лыжи лучше скользили по асфальту, то правильный ответ должен быть не в категории рассуждений "солидол или вазелин", а предложение поставить прицеп на колеса.

Цитата Сообщение от BroDIK Посмотреть сообщение
Дело в том, что я работаю с устройством, посылая ему команды. И мне никак нельзя посылать команды параллельно.
И тем более, я делаю приложение на WinForms. Для этого мне и нужны потоки.
Исходя из всех данных, полученных от вас, правильным решением будет запустить один отдельный поток, чтобы не вис интерфейс, и в этом потоке последовательно посылать команды.

Не по теме:

Цитата Сообщение от BroDIK Посмотреть сообщение
без всяких вопросов дали ответ по делу
Ну тогда солидол :)

0
1158 / 880 / 513
Регистрация: 09.04.2014
Сообщений: 2,084
09.10.2014, 14:34 8
Цитата Сообщение от BroDIK Посмотреть сообщение
И мне никак нельзя посылать команды параллельно.
а зачем их посылать из разных потоков, вот что интересно (для расширения собственного кругозора)
0
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
09.10.2014, 14:41  [ТС] 9
Цитата Сообщение от kolorotur Посмотреть сообщение
Исходя из всех данных, полученных от вас, правильным решением будет запустить один отдельный поток, чтобы не вис интерфейс, и в этом потоке последовательно посылать команды.
На форме находятся много вкладок, в которых есть еще вкладки. А на этих вкладках есть несколько ListView. В зависимости от определенных строк ListView, команды посылаются различных форматов. И, конечно, перед этим собираются данные с определенных вкладок и конвертируются соответственно. Что теперь нужно сделать? Снова все в одном отдельном потоке? Может есть вариант по-лучше? Посоветуйте)

Добавлено через 3 минуты
Цитата Сообщение от nedel Посмотреть сообщение
а зачем их посылать из разных потоков, вот что интересно (для расширения собственного кругозора)
Потому что в нескольких командах формат сообщения синтаксически и в последовательности отправки (изредко) повторяется.

Добавлено через 1 минуту
Tirenta, Ваш вариант, к сожалению, мне не подходит: версия C# != 5
Но все равно спасибо
0
Эксперт .NET
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
09.10.2014, 15:01 10
Цитата Сообщение от BroDIK Посмотреть сообщение
На форме находятся много вкладок, в которых есть еще вкладки. А на этих вкладках есть несколько ListView. В зависимости от определенных строк ListView, команды посылаются различных форматов. И, конечно, перед этим собираются данные с определенных вкладок и конвертируются соответственно. Что теперь нужно сделать?
В какой момент происходит отправка очередной команды?
При выборе вкладки?
При клике на элемент ListView?
При клике по кнопке?
По таймеру?

Если не сложно, опишите алгоритм, по которому работает приложение.
Пока что больше всего похоже на то, что вам нужен паттерн Producer/Consumer, но прежде чем кидаться в реализацию, хотелось бы по-больше информации.

Добавлено через 1 минуту
Ну и чтобы два раза не вставать: под какую версию фреймворка пишете?
0
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
10.10.2014, 09:03  [ТС] 11
Это уже совсем другая тема Всем спасибо за советы
0
10.10.2014, 09:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2014, 09:03
Помогаю со студенческими работами здесь

Как обезопасить dataReader от доступа из нескольких потоков?
Привет! Имеется несколько таблиц с изображениями и несколькими сотнями строк. Чтобы считывание...

Как сделать чтобы массив заполнился из нескольких потоков?
Задан двумерный массив A из N x N элементов, расположенный в локальной памяти каждой нити, то есть...

Как обеспечить синхронизацию xchg для нескольких потоков?
Добрый вечер. Требуется небольшая консультация по мьютексам. Вообщем, вопрос в следующем. Есть код...

Отобразить ход нескольких потоков в нескольких ProgressBar
Возник вопрос как прикрепить ProgressBar к потокам, к примеру 100 потоков, нужно, чтобы ProgressBar...

Как реализовать создание и завершение потоков
Здравствуйте ув.форумчане! Подскажите пожалуйста как реализовать старт и стоп потоков. В библиотеке...

Как реализовать рекурсию в синхронизации потоков
Здравствуйте.Объясните чайнику как реализовать рекурсию в синхронизации потоков(сам софт...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru