|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.09.2019, 17:37 | #11 |
Пользователь
Регистрация: 26.05.2015
Сообщений: 56
|
Ты имеешь ввиду после синхронизации искать ? Если как то узнать что поток завис и делать Break; в for при этом потому что if terminated then Break; не выполняется
|
26.09.2019, 17:41 | #12 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Нет. Вы то прочитали, что там написано? Не до или после синхронизации, а вместо нее - убирать ее. Где я писал про поток завис или брек?
|
26.09.2019, 17:49 | #13 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
По вашему огрызку кода ничего нельзя понять.
Можно сказать только одно Synchronize вы используете как-то неправильно. Самый простой способ. Кладёте на главную форму таймер. В таймера проверяете результат от ваших потоков и выводит его. При таком раскладе таймер будет работать в главном потоке. Но ему нужно знать какие потоки живые. Для этого пред тем как разрушить поток вызываете Synchronize(selfDeleteThread) внутри которого удаляет свой поток из массива потоков. Так как это код выполняется через синхронизацию, то он будет работать в главном потоке. Причём в промежутках когда таймер отработал. Чём добьётеся потоковой безопасности. В таком алгоритме Synchronize вызывается всего один раз.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 26.09.2019 в 17:52. |
26.09.2019, 17:50 | #14 |
Пользователь
Регистрация: 26.05.2015
Сообщений: 56
|
Приведите пжл пример не пойму я никак всё равно ничего путёвого с таймером не вышло
Последний раз редактировалось noveek; 26.09.2019 в 19:39. |
27.09.2019, 02:31 | #15 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,869
|
|
27.09.2019, 05:53 | #16 |
Пользователь
Регистрация: 26.05.2015
Сообщений: 56
|
|
27.09.2019, 06:46 | #17 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Как и в не мнопоточной, только с пониманием, что если надолго или часто будете дергать "блокировки" будут фризи и гонки.
|
27.09.2019, 07:38 | #18 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
А может мы услжняем и ему нужно вызвать TParallel.For?
Как обезопасить переменные? Локальные переменные и параметры функций в защите не нуждаются так как располагаются в разных участках памяти. Поэтому обращения к ним не пересекается. Общие переменные для потоков должны быть защищены. А также ввод и вывод его тоже надо обезопасить, так как VCL не безопасен, программист должен сам позаботиться об этом используя синхронизацию. TInterlocked применяется для синхронизации по-данным. Пример гонка процессов: Код:
изменяем на TInterlocked.Increment получаем правильную сумму 101 TParallel.For использует пул-потоков для автоматического создания и уничтожения потоков. Много потоков плохо сказывается на производительности. Мало тоже. Вот пул-потоков время от времени определяет производительности и создает недостающие потоки или уничтожает лишние потоки. Каждая итерация цикла выполняется параллельно во-времени. В переменную I передаётся номер цикла. P.S. Пример с таймером выложу попозже.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
27.09.2019, 07:41 | #19 |
Пользователь
Регистрация: 26.05.2015
Сообщений: 56
|
Ну так вот катит только for уже не несут никакой пользы
Код:
Последний раз редактировалось noveek; 27.09.2019 в 07:48. |
27.09.2019, 09:23 | #20 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Может вы тему начнете читать? Вернул старый код с
Код:
Цитата:
Но вы ведь так и непоняли, что это за зависания и почему они происходят... |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
boost::thread std::thread | lallollulz | Общие вопросы C/C++ | 2 | 11.09.2019 00:48 |
Итерационные циклы, циклы с фактериалами, вообще не могу догнать( помогите плиз! | Svetlana_ | Помощь студентам | 2 | 01.11.2015 18:58 |
C++ Thread и WIN API | Pir | C++ Builder | 2 | 13.01.2014 12:12 |
thread | slipp | Win Api | 2 | 24.11.2013 03:11 |
Thread и MVC | OnlyFart | ASP.NET | 0 | 06.05.2011 11:12 |