|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.03.2017, 15:18 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Синхронизация потоков
Здравствуйте.
Суть такова: есть некоторое количество потоков, каждый из которых выводит время (таймаут) до начала события, закреплённого за этим потоком. У каждого потока свой таймаут. Количество таких потоков вывода информации меняется в процессе выполнения следующим образом: таймаут вышел, выполнение события, и опять на таймаут. И так до тех пор, пока в интерфейсе не произойдёт событие, которое выполнит завершение определённого потока. Каждый поток выводит таймаут на свой контрол (Label). Задача следующая: организовать синхронизацию вывода, что бы итерации отображения времени всех потоков выполнялись одновременно. Без синхронизации через время по лейбам становится видна вся пределсть асинхрона. Задача не критична, но для "красоты" (и для дальнейшего развития) стоит должного внимания. Возможный вариант синхронизации в моём велосипед-стайле: счётчики потоков. Вопрос: какие существуют уже готовые методы реализации подобной задачи ?
Подпись ? Не, не слышал ...
|
01.03.2017, 15:38 | #2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
НЕ нагружать потоки ненужным им(потокам) выводом.
поток должен работать и менять свое состояние, но не состояние НАБЛЮДАТЕЛЯ за потоками (форму вывода). Всем потокам дать атрибуты(или переменные) характеризующие их состояние. ждем; осталось времени; ... и отображение (тот самый наблюдатель) ЗНАЮЩЕЕ о своих(запущенных) потоках и следовательно имеющее возможность "прочитать" эти атрибуты ВЫВОДИТ значения этих атрибутов в удобном для пользователя виде (label). сразу для всех потоков имеющих место быть синхронно и НЕЗАВИСИМО от потоков. как вариант предусмотреть для потоков возможность НЕ ВЫВОДА, а всего лишь "пнуть" главный для вывода.
программа — запись алгоритма на языке понятном транслятору
|
01.03.2017, 15:58 | #3 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
evg_m, я не знаю, о чём это вы, но у меня есть один большой поток, который выполняет событие; и между выполнением создаётся поток, который сидит считает, сколько осталось времени до следующего выполнения. Во время выполнения этого потока происходит вывод в лейбу, Invoke всего один раз на итерацию. Возможность НЕ выводить предусмотрена: при создании главного потока вместо лейбы можно передать любой контрол; если передать null - функция вывода не попадает на Invoke по условию.
Подпись ? Не, не слышал ...
|
01.03.2017, 16:11 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Убрать сам вывод в UI из потоков, сделать только сообщение состояния (основному потоку). Ну и в основном потоке выводить когда угодно и куда угодно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
01.03.2017, 16:21 | #5 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
У меня на форме только лейбы. Так что это не вариант. Поток отработал, и сидит ждёт. И нужно, что бы было видно время ожидания.
Подпись ? Не, не слышал ...
|
01.03.2017, 16:32 | #6 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
сейчас
поток вычислил время ожидания и вывел в label сделать поток вычислил время ожидания и ЗАПИСАЛ в переменную(элемент массива\public property потока) ДОСТУПНУЮ форме. форма САМА без напоминания от потока прочитала эту переменную и ВЫВЕЛА в label опционально сделать возможность напоминания форме от потока о необходимости вывода.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 01.03.2017 в 16:36. |
01.03.2017, 16:39 | #7 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
А у меня на подоконнике стоит цветок.
И что? Цитата:
http://www.programmersforum.ru/showt...=2#post1661912
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
01.03.2017, 16:47 | #8 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
И всё равно остаётся вопрос: как организовать "взаимосинхронизацио" потоков ? Это тут причём ?
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 01.03.2017 в 16:55. |
|
01.03.2017, 16:56 | #9 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
если потоки НЕ занимают один и тот же ресурс, то зачем им взаимно (не с формой а именно меж собой) синхронизироваться. Цитата:
ВСЕ что потокам надо сделать это обеспечить корректное заполнение переменных с данными о времени (на всякий случай желательно это делать в режиме синхронизации с формой и только с ней) .
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 01.03.2017 в 16:59. |
||
01.03.2017, 17:03 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Синхронизация потоков | _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 |