Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2015, 05:14   #1
orphen
 
Регистрация: 06.08.2015
Сообщений: 6
Вопрос Распараллеливание объектов

Всем привет.

У меня приложение отображает некоторое кол-во панелей, на них идет время и показывается есть ли разница с текущем временем. Вот как мне сделать чтобы они все были созданы в разных потоках и не взаимодействовали друг с другом. А то от не работы одной, виснет все приложение.
Заранее спасибо.
orphen вне форума Ответить с цитированием
Старый 06.08.2015, 06:39   #2
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

http://habrahabr.ru/post/126495/

выделите часы каждый в свою функцию и запустите потоки, в функции часы инициализируются и будут работать отдельно от остальных часов. К объектам на форме необходимо обращаться через делегат.
https://msdn.microsoft.com/ru-ru/lib...v=vs.120).aspx

Второй вариант - воспользуйтесь timer, где на timer.Tick сделайте обработку часов каждый в своей функции. Создадите нужное количество таймеров, каждый со своей функцией тика, в ней опять же через делегат выводите разницу во времени.

Единственное, не забудьте синхронизировать ваши потоки (таймеры) с текущим временем, чтобы они в миллисекундах совпадали - иначе на большом количестве панелей будет рябь (имхо) при смене секунд.
Akeloya вне форума Ответить с цитированием
Старый 06.08.2015, 09:20   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
отображает некоторое кол-во панелей, на них идет время и показывается есть ли разница с текущем временем.
Время есть только одно -ТЕКУЩЕЕ. Все остальное какие-то СЧЕТЧИКИ имитирующие часы.
Так что ваше описание (и ответы на них!) классический X, Y, Z
Дайте описание исходной задачи (без панелей/часов/потоков/таймеров)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.08.2015, 11:22   #4
orphen
 
Регистрация: 06.08.2015
Сообщений: 6
По умолчанию

Задача заключается в том, чтобы главная форма не висла от доп. форм при их зависании либо при их работе.
orphen вне форума Ответить с цитированием
Старый 06.08.2015, 11:46   #5
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Интерфейс в принципе не должен зависеть от работы программы. Возможно вы что-то не то делаете внутри ваших "панелей" или "форм".
ResourceSpace вне форума Ответить с цитированием
Старый 06.08.2015, 12:23   #6
orphen
 
Регистрация: 06.08.2015
Сообщений: 6
По умолчанию

Возможно так и есть. Понять бы что не так
orphen вне форума Ответить с цитированием
Старый 06.08.2015, 12:50   #7
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от orphen Посмотреть сообщение
Возможно так и есть. Понять бы что не так
В целом, я ответил на ваш вопрос о развязке логики и интерфейса первым же ответом.

До кучи могу еще дать ссыль на backgroundworker
https://msdn.microsoft.com/ru-ru/lib...v=vs.120).aspx
Akeloya вне форума Ответить с цитированием
Старый 07.08.2015, 06:12   #8
orphen
 
Регистрация: 06.08.2015
Сообщений: 6
По умолчанию

Тогда такой вопрос - а откуда именно запускать backgroundworker?

из формы главной или из классов?
есть Form1 и класс, в котором еще дочерний класс.
orphen вне форума Ответить с цитированием
Старый 07.08.2015, 06:26   #9
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

orphen, не смешивайте мух и котлеты.

У вас есть визуальная часть вашего приложения, у этой визуальной части есть обработчики, например, Form1_Loaded, button_click и т.д.
А есть логика вашего приложения. Так вот логика вашего приложения должна быть развязана с визуальной частью и стыковаться только на обработчиках событий (нажатие той же кнопки, запускающее загрузку данных).
Все операции должны быть асинхронными, иначе визуальная часть будет виснуть.

Откуда запускать backgroundworker решать вам, так как всё зависит от того, какую логику вы закладываете в ваше приложение. Например, если пользователь должен открывать форму на которой находится датагрид и данные должны загрузаться сразу же после открытия формы, логично, чтобы асинхронная загрузка запускалась в момент открытия формы.

А при возникновении событий завершения загрузки данные добавлялись в визуальную часть.
Akeloya вне форума Ответить с цитированием
Старый 07.08.2015, 06:45   #10
orphen
 
Регистрация: 06.08.2015
Сообщений: 6
По умолчанию

Видите в чем загвоздка, я не знаю как сделать чтобы 19 панелей были отдельными друг от друга.
orphen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
распараллеливание циклов c++ Denis++ Visual C++ 5 22.05.2014 09:25
Распараллеливание программы (C++) Lamaro Помощь студентам 5 04.10.2012 21:50
Распараллеливание процессов Walanter Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.03.2012 22:02
Распараллеливание процессов Zooleen Общие вопросы C/C++ 0 16.06.2010 16:59
Распараллеливание потока eXa Общие вопросы Delphi 3 19.07.2007 20:11