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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2017, 15:18   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Синхронизация потоков

Здравствуйте.
Суть такова: есть некоторое количество потоков, каждый из которых выводит время (таймаут) до начала события, закреплённого за этим потоком. У каждого потока свой таймаут.
Количество таких потоков вывода информации меняется в процессе выполнения следующим образом: таймаут вышел, выполнение события, и опять на таймаут. И так до тех пор, пока в интерфейсе не произойдёт событие, которое выполнит завершение определённого потока.
Каждый поток выводит таймаут на свой контрол (Label).
Задача следующая: организовать синхронизацию вывода, что бы итерации отображения времени всех потоков выполнялись одновременно. Без синхронизации через время по лейбам становится видна вся пределсть асинхрона. Задача не критична, но для "красоты" (и для дальнейшего развития) стоит должного внимания.
Возможный вариант синхронизации в моём велосипед-стайле: счётчики потоков.
Вопрос: какие существуют уже готовые методы реализации подобной задачи ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 01.03.2017, 15:38   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

НЕ нагружать потоки ненужным им(потокам) выводом.
поток должен работать и менять свое состояние, но не состояние НАБЛЮДАТЕЛЯ за потоками (форму вывода).
Всем потокам дать атрибуты(или переменные) характеризующие их состояние.
ждем; осталось времени; ...

и отображение (тот самый наблюдатель) ЗНАЮЩЕЕ о своих(запущенных) потоках и следовательно имеющее возможность "прочитать" эти атрибуты ВЫВОДИТ значения этих атрибутов в удобном для пользователя виде (label).
сразу для всех потоков имеющих место быть синхронно и НЕЗАВИСИМО от потоков.
как вариант предусмотреть для потоков возможность НЕ ВЫВОДА, а всего лишь "пнуть" главный для вывода.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 01.03.2017, 15:58   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

evg_m, я не знаю, о чём это вы, но у меня есть один большой поток, который выполняет событие; и между выполнением создаётся поток, который сидит считает, сколько осталось времени до следующего выполнения. Во время выполнения этого потока происходит вывод в лейбу, Invoke всего один раз на итерацию. Возможность НЕ выводить предусмотрена: при создании главного потока вместо лейбы можно передать любой контрол; если передать null - функция вывода не попадает на Invoke по условию.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 01.03.2017, 16:11   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
я не знаю, о чём это вы
Убрать сам вывод в UI из потоков, сделать только сообщение состояния (основному потоку). Ну и в основном потоке выводить когда угодно и куда угодно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.03.2017, 16:21   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Убрать сам вывод в UI из потоков
У меня на форме только лейбы. Так что это не вариант. Поток отработал, и сидит ждёт. И нужно, что бы было видно время ожидания.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 01.03.2017, 16:32   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

сейчас
поток вычислил время ожидания и вывел в label

сделать
поток вычислил время ожидания и ЗАПИСАЛ в переменную(элемент массива\public property потока) ДОСТУПНУЮ форме.
форма САМА без напоминания от потока прочитала эту переменную и ВЫВЕЛА в label
опционально сделать возможность напоминания форме от потока о необходимости вывода.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.03.2017 в 16:36.
evg_m вне форума Ответить с цитированием
Старый 01.03.2017, 16:39   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
У меня на форме только лейбы.
А у меня на подоконнике стоит цветок.
И что?


Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Поток отработал, и сидит ждёт. И нужно, что бы было видно время ожидания.
В предыдущих темах же уже показывали разные варианты решения этого без вывода из самого потока.
http://www.programmersforum.ru/showt...=2#post1661912
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.03.2017, 16:47   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
сделать
поток вычислил время ожидания и ЗАПИСАЛ в переменную(элемент массива\public property потока) ДОСТУПНУЮ форме.
форма САМА без напоминания от потока прочитала эту переменную и ВЫВЕЛА в label
Вариант конечно хороший; наверное, так и сделаю. НО, как я сказал - потоков может быть много, всё зависит от того, сколько задач создаст пользователь. И тогда такой способ сильно уменьшает способность программы выдерживать нагрузки; чем больше потоков - тем дольше вывод в форме. Если каждый поток сам выводит информацию - такая проблема отпадает.
И всё равно остаётся вопрос: как организовать "взаимосинхронизацио" потоков ?
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А у меня на подоконнике стоит цветок.
Это тут причём ?
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 01.03.2017 в 16:55.
OmegaBerkut вне форума Ответить с цитированием
Старый 01.03.2017, 16:56   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
"взаимосинхронизацио" потоков
?
если потоки НЕ занимают один и тот же ресурс, то зачем им взаимно (не с формой а именно меж собой) синхронизироваться.

Цитата:
что бы итерации отображения времени всех потоков выполнялись одновременно.
так потоки ничего не выводят. Выводит только форма все сразу и когда пожелает.

ВСЕ что потокам надо сделать это обеспечить корректное заполнение переменных с данными о времени (на всякий случай желательно это делать в режиме синхронизации с формой и только с ней) .
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.03.2017 в 16:59.
evg_m вне форума Ответить с цитированием
Старый 01.03.2017, 17:03   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Это тут причём ?
не знаю, а лейблы на форме причем?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация потоков _ZixeL_ Общие вопросы Delphi 14 10.09.2015 22:23
Синхронизация потоков Fireblade-fan Общие вопросы Delphi 5 17.12.2012 01:57
Синхронизация потоков _Bers Общие вопросы C/C++ 5 23.12.2011 22:57
синхронизация потоков m_kostik Win Api 0 26.03.2010 23:56