5 / 5 / 3
Регистрация: 04.06.2015
Сообщений: 33
|
||||||
1 | ||||||
Единый блок кода для всех потоков07.02.2016, 15:39. Показов 1247. Ответов 3
Метки нет (Все метки)
Как выполнить блок кода для всех потоков 1 раз, а не чтобы каждый поток его выполнял.
Вот, по сути урезанная моя программка. Более детально описал проблему ниже.
0
|
07.02.2016, 15:39 | |
Ответы с готовыми решениями:
3
единый элемент для всех страниц Единый базовый класс для всех производных Единый сетевой профиль для всех пользователей AD Единый для всех версий Windows (от 5.1 и выше), способ для вкл\выкл сетевого адаптера |
07.02.2016, 15:55 | 2 |
Derevyniy,
1) Нельзя выводить сообщения пользователю в не GUI протоках. Это неправильно как технически, так и архитектурно. 2) Создайте отдельный поток, который будет следить за состоянием потоков (или объекта _png ) и выдавать сообщения пользователю через Invoke.
1
|
5 / 5 / 3
Регистрация: 04.06.2015
Сообщений: 33
|
|
07.02.2016, 20:04 [ТС] | 3 |
Storm23, как только кончаются картинки, я вывожу модальный мессаджбокс для блока потоков и он будет постоянно выводится, пока заного через btnLoadFile не выбрать папку с картинками, после загрузки по нажатию на мессаджбоксе "ок" поток продолжает работу, но надо нажимать 3 раза ибо 3 мессаджа выводится , опять же потому что 3 потока. Как сделать чтобы можно было нажать только 1 раз на 1 мессаджбоксе для продолжения работы всех потоков.
Добавлено через 1 час 45 минут В общем еще подумав, я понял, что я прошу невозможное. Тогда как все таки и какими способами сделать так, чтобы выполнялся цикл, как только кончались в папке картинке, потоки ставились на паузу и ожидали выбора новой папки и после этого продолжали работу. Схема приведенная выше работает идеально в 1 потоке. а когда их 2-3 или более, то гемморой с выскакиванием несколько messagebox. Добавлено через 24 минуты Попробую максимально описать свою задачу. Выбирается папка с картинками, нажимается кнопка старт,создается ну к примеру 3 потока. Они конвертируют картинки, картинок остается 3, 1 поток забирает картинку, остается 2-е , тут оканчивает конвертирование 2 поток и тоже берет картинку , остается одна. 3 поток долго выполняет операцию и его обгоняет 1 и вновь забирает картинку, остается 0. Выполнил операцию 3 поток и хочет взять картинку, ее нету. Поток идет в else и должен ждать переход останых потоков в else, как 3 потока оказываются в блоке кода else, то выскакивает 1)openfiledialog и просит выбрать новую папку, мы открываем ее и если произошла загрузка картинок, то продолжают работу все 3 потока, если нет, то опять выскакивает openfiledialog и просит выбрать. ИЛИ 2)Выскакивает 1 раз Messagebox с уведомлением что кончились картинки, мол подгрузите новые. Мы нажимаем на btnFileLoad и загружаем картинки, после чего работа всех 3 потоков продолжается. P.s Storm23, если умел я бы не спрашивал на форуме и не просил помощи. Моих сил и знаний хватило только на это. Да и если я выполню делегат, который в коде GUI выведет messagebox, то ДЛЯ МЕНЯ разницы не будет, ибо будет все точно так же, 3 мессаджбокса, только с технической и архитектурной точки зрения правильно. Добавлено через 1 час 36 минут Много букв выше и бреда, поэтому дублирую, думаю смог верно сформулировать.(Моя задача): Попробую максимально описать свою задачу. Выбирается папка с картинками, нажимается кнопка старт,создается ну к примеру 3 потока. Они конвертируют картинки, картинок остается 3, 1 поток забирает картинку, остается 2-е , тут оканчивает конвертирование 2 поток и тоже берет картинку , остается одна. 3 поток долго выполняет операцию и его обгоняет 1 и вновь забирает картинку, остается 0. Выполнил операцию 3 поток и хочет взять картинку, ее нету. Поток идет в else и должен ждать переход останых потоков в else, как 3 потока оказываются в блоке кода else, то выскакивает 1)openfiledialog и просит выбрать новую папку, мы открываем ее и если произошла загрузка картинок, то продолжают работу все 3 потока, если нет, то опять выскакивает openfiledialog и просит выбрать. ИЛИ 2)Выскакивает 1 раз Messagebox с уведомлением что кончились картинки, мол подгрузите новые. Мы нажимаем на btnFileLoad и загружаем картинки, после чего работа всех 3 потоков продолжается.
0
|
07.02.2016, 21:22 | 4 | |||||
Сообщение было отмечено Derevyniy как решение
Решение
Спасибо за подробное объяснение задачи. Но я и с первого раза понял что вам нужно
И решение вашей задачи полностью описано в моем посте. Я вам предлагал создать еще один поток, который будет следить за состоянием других потоков. И как только все они завершат работу - выдать сообщение пользователю. Вот подробное решение:
Метод OnCompleted разблокирует кнопку старта, и выдает сообщение об окончании процесса пользователю. При этом, сообщение выдается только один раз. Кроме того, пока файлы обрабатываются GUI поток свободен, форма не виснет.
1
|
07.02.2016, 21:22 | |
07.02.2016, 21:22 | |
Помогаю со студенческими работами здесь
4
Как задать единый размер для всех папок в Windows XP? Как задать единый путь к node_modules для всех проектов Общение пхп потоков, есть ли область видимая для всех пхп потоков? Является ли метод run() общим для всех потоков? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|