93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
|
|
1 | |
Как реализовать очередь нескольких потоков?09.10.2014, 10:51. Показов 2870. Ответов 10
Метки нет (Все метки)
Здравствуйте, коллеги! Посоветуйте, как мне реализовать очередь нескольких потоков? Мне нужно сделать так, чтобы после выполнения одного потока запускался следующий. После успешного завершения следующего - запускался третий и.т.д.
0
|
09.10.2014, 10:51 | |
Ответы с готовыми решениями:
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
|
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, прав. У меня была проблема когда я не мог ставить главный поток на паузу, т.к форма залипала. Из за этого делил на 2 потока(1 форма, 2 функционал), но в вашем вопросе я не вижу ничего подобного
0
|
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
|
|
09.10.2014, 14:14 [ТС] | 6 |
Если ТС написал:
значит так надо Я извиняюсь, наверное, нужно было сразу обозначить суть проблемы. Дело в том, что я работаю с устройством, посылая ему команды. И мне никак нельзя посылать команды параллельно.
И тем более, я делаю приложение на WinForms. Для этого мне и нужны потоки. Вариант Defazze я уже попробовал - работает Теперь попробуем через await. Чуть позже напишу о результатах.
Не по теме: Ставлю "Спасибо" в этой теме людям, которые без всяких вопросов дали ответ по делу :)
0
|
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
09.10.2014, 14:27 | 7 |
В большинстве случаев ТС хочет решить определенную задачу, а не просто поиграться с синтаксисом ради развлечения.
Зачастую путь к решению задачи выбирается неправильный или слишком долгий и сложный: если ТС для задачи по перевозке грузов выбрал сани и теперь спрашивает, какую использовать смазку, чтобы лыжи лучше скользили по асфальту, то правильный ответ должен быть не в категории рассуждений "солидол или вазелин", а предложение поставить прицеп на колеса. Исходя из всех данных, полученных от вас, правильным решением будет запустить один отдельный поток, чтобы не вис интерфейс, и в этом потоке последовательно посылать команды.
0
|
1158 / 880 / 513
Регистрация: 09.04.2014
Сообщений: 2,084
|
|
09.10.2014, 14:34 | 8 |
а зачем их посылать из разных потоков, вот что интересно (для расширения собственного кругозора)
0
|
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
|
|
09.10.2014, 14:41 [ТС] | 9 |
На форме находятся много вкладок, в которых есть еще вкладки. А на этих вкладках есть несколько ListView. В зависимости от определенных строк ListView, команды посылаются различных форматов. И, конечно, перед этим собираются данные с определенных вкладок и конвертируются соответственно. Что теперь нужно сделать? Снова все в одном отдельном потоке? Может есть вариант по-лучше? Посоветуйте)
Добавлено через 3 минуты Потому что в нескольких командах формат сообщения синтаксически и в последовательности отправки (изредко) повторяется. Добавлено через 1 минуту Tirenta, Ваш вариант, к сожалению, мне не подходит: версия C# != 5 Но все равно спасибо
0
|
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
09.10.2014, 15:01 | 10 |
В какой момент происходит отправка очередной команды?
При выборе вкладки? При клике на элемент ListView? При клике по кнопке? По таймеру? Если не сложно, опишите алгоритм, по которому работает приложение. Пока что больше всего похоже на то, что вам нужен паттерн Producer/Consumer, но прежде чем кидаться в реализацию, хотелось бы по-больше информации. Добавлено через 1 минуту Ну и чтобы два раза не вставать: под какую версию фреймворка пишете?
0
|
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
|
|
10.10.2014, 09:03 [ТС] | 11 |
Это уже совсем другая тема Всем спасибо за советы
0
|
10.10.2014, 09:03 | |
10.10.2014, 09:03 | |
Помогаю со студенческими работами здесь
11
Как обезопасить dataReader от доступа из нескольких потоков? Как сделать чтобы массив заполнился из нескольких потоков? Как обеспечить синхронизацию xchg для нескольких потоков? Отобразить ход нескольких потоков в нескольких ProgressBar Как реализовать создание и завершение потоков Как реализовать рекурсию в синхронизации потоков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |