|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.07.2013, 14:52 | #1 |
Новичок
Джуниор
Регистрация: 13.07.2013
Сообщений: 5
|
функция с потоками
Добрый день/вечер. Я все никак не могу разобраться с одним важным примером, если несложно подскажите как точно его решить.
В программе есть функция которая должна вычислить что-то по некой формуле. Это что-то может быть разбито на три параллельные, независимые части (циклы). В конце функция обрабатывает все три части/циклы и выдает нужный результат. Вот пример: Код:
Вычисления проходят успешно и ответ правельный, но.... Это очень длительный процесс (слишком большие массивы и многократные действия над ними) и разумеется пока все не закончиться форма будет "висеть". Это все грузит только одно ядро/нить так как процесс последовательный. ___________ Мне нужно чтобы три цикла прогонялись параллельно и выдали все элементы массива d (i от 1 до n+m) (я думаю я получу выигрыш по времени, задействую больше тредов и форма не будет висеть). Наверно надо как-то их вынести в отдельные процедуры-нити. В это время в главной программе результат должен "дождаться" окончания всех трех нитей, собрать с них все d-элементы и похимичив над ними выдать результат. __________ Я не никогда не работал с тредами в дельфи, поэтому кто разбирается помогите в этом вопросе, мне срочно нужно разобраться в таких параллельных вычислениях. Если несложно разберите по косточкам данный пример (с коментариями) так как про треды я почти ничего не знаю. Мне всегда легче понять на знакомом мне примере, а поняв его и собравшись с мыслями я начну читать теорию. Спасибо заранее. Последний раз редактировалось borderliner; 13.07.2013 в 16:01. |
13.07.2013, 15:20 | #2 |
Пользователь
Регистрация: 13.07.2013
Сообщений: 18
|
Вот тут глянь урок по потокам в Delphi - http://programmerinfo.ru/thread/
Если что непонятно, пиши тут, помогу чем смогу =)
Я тебе чем-то помог? Нажми слева на значок весов. Спасибо =)
Мой сайт с видеоуроками по программированию - http://programmerinfo.ru/ |
13.07.2013, 15:54 | #3 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
Добавь строку в цыклы:
Код:
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
13.07.2013, 16:05 | #4 | ||
Новичок
Джуниор
Регистрация: 13.07.2013
Сообщений: 5
|
Цитата:
Цитата:
Однако вопрос остается открытым, как в функции распределить циклы по потокам. |
||
13.07.2013, 16:30 | #5 |
Пользователь
Регистрация: 13.07.2013
Сообщений: 18
|
Ты сейчас просмотри, урок что я тебе дал, как раз там для этого пример есть. Глядишь может тему и закроешь сразу
Я тебе чем-то помог? Нажми слева на значок весов. Спасибо =)
Мой сайт с видеоуроками по программированию - http://programmerinfo.ru/ |
13.07.2013, 18:06 | #6 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
|
|
13.07.2013, 21:35 | #7 |
Пользователь
Регистрация: 13.07.2013
Сообщений: 18
|
Ок смотри, создавай основной класс для работы потока как показано в видео, от него наследуй 3 класса наследника, у каждого из них создай собственную функцию(метод) в которой полностью записаны твои вычисления. теперь при запуске программы создавай эти потоки и запускай соответствующие методы с вычислениями. они будут выполняться одновременно.
ну а для отлавливания завершений работы потоков - можно вызывать исключение, но это долго, потому проще мне кажется добавить в потоки флаги говорящие о том закончена в них обработка или нет. и периодически просто опрашивать их по таймеру. можно еще через критическую секцию сделать или вообще тупо вызывать функцию специальную для конечных вычислений, на третий её вызов производить эти самые вычисления. в общем отловить результат не проблема если подумать. надеюсь понятно объяснил? если нет придется полноценный урок писать на эту тему... Просто для человека свободно владеющего ООП это само выливается из того примера что я дал в видео, ну во всяком случае если чуть чуть подумать ;-)
Я тебе чем-то помог? Нажми слева на значок весов. Спасибо =)
Мой сайт с видеоуроками по программированию - http://programmerinfo.ru/ Последний раз редактировалось -glykaman-; 13.07.2013 в 21:51. |
13.07.2013, 22:16 | #8 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
У ТС задачка на распределительные и параллельные вычисления.
Формула режется на отдельные части и раздается потокам, а те, одновременно, решают и работают как один. Главное соблюдать целостность и порядок решения. Скорость, что важно для ТС, достигается этой самой многозадачностью. Цитата:
Цитата:
Последний раз редактировалось Человек_Борща; 13.07.2013 в 22:18. |
||
13.07.2013, 22:20 | #9 |
Пользователь
Регистрация: 13.07.2013
Сообщений: 18
|
Сорри я не въехал походу...
Но объясните мне тогда Вот три части которые дал ТС: Код:
поучится что все они выполняются параллельно, разве нет? Пример относительно простой вроде или я чего-то недогнал...
Я тебе чем-то помог? Нажми слева на значок весов. Спасибо =)
Мой сайт с видеоуроками по программированию - http://programmerinfo.ru/ Последний раз редактировалось -glykaman-; 13.07.2013 в 22:28. |
13.07.2013, 22:26 | #10 |
Новичок
Джуниор
Регистрация: 13.07.2013
Сообщений: 5
|
Потоки в Дельфи кажутся слишком запутанной и муторной процедурой, поэтому не увидев это на конкретном примере трудно увидеть аналогию, тем более для тех кто никогда с ними не работал. Прикольно что текст описывающий потоки и обращения к ним занимает гораздо больше места чем сам конкретный алгоритм. Я прочитал много всяких ссылок и везде все по-разному. Constructor, inherit, property, execute и тонна всяких других вещей которые я никогда не использовал в обычных однопоточных приложениях.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с потоками | -Jack- | Общие вопросы Delphi | 3 | 12.02.2013 23:21 |
Работа с потоками | derElektroBesen | Помощь студентам | 3 | 17.07.2011 14:33 |
работа с потоками | SHtirlic1 | Общие вопросы Delphi | 10 | 15.03.2011 20:03 |
Проблемы с потоками в С | m9yt | Общие вопросы C/C++ | 4 | 14.04.2010 14:25 |
Работа с потоками | Яр|/||< (^_^) | Общие вопросы Delphi | 5 | 09.03.2010 08:23 |