|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.07.2013, 22:34 | #11 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
да, тема не простая, но разобратся в ней вполне реально, просто нужно понимать механику. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
13.07.2013, 22:39 | #12 | |
Пользователь
Регистрация: 13.07.2013
Сообщений: 18
|
Цитата:
Возьми какой-нибудь конкретный пример повтори, если заработало - разбирай его подробно - до каждого ключевого слова.. Затем его уже подстраивай под свои нужды. Так я делаю если встречаюсь чем-то неизвестным. Долго но результативно + новые знания хорошо усваиваются.
Я тебе чем-то помог? Нажми слева на значок весов. Спасибо =)
Мой сайт с видеоуроками по программированию - http://programmerinfo.ru/ |
|
13.07.2013, 22:44 | #13 | |
Новичок
Джуниор
Регистрация: 13.07.2013
Сообщений: 5
|
Цитата:
Вы правы, поэтому я и спросил, потому что тема для меня новая и хотелось бы узнать у тех кто разбирается. Программирование сама по себе область очень и очень обширная все знать невозможно и часто сталкивание с новыми вещами неизбежно. Хотелось бы подробно разобраться в данном нетривиальном вопросе. |
|
13.07.2013, 22:53 | #14 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
а исключение не долго вызвать, только это глупо, обрабатывать то кто будет? основной поток этого не сможет сделать. Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
13.07.2013, 23:00 | #15 |
Новичок
Джуниор
Регистрация: 13.07.2013
Сообщений: 5
|
Мне всегда легче понять из знакомого примера и начать с практики, а потом уже перейти к теории. Часто в приведенных примерах отсутствует наглядность, а это мне знакомый случай. Три потока независимо вычисляют необходимые части массива. Главная программа дожидается завершения всех трех потоков и только потом делает необходимые операции. Я просто не знаю как это все реализуется.
|
14.07.2013, 01:43 | #16 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Можно создать поток, который создаст ещё 3 потока. Один поток как TThread, остальные потоки можно покороче оформить через BeginThread (никто не запрещает использовать полностью TThread, но, ИМХО, это избыточно)
Код:
Это не лучший пример для изучения хотя бы лишь по тому, что смешаны 2 вида создания потоков (хотя они родственники) |
14.07.2013, 04:44 | #17 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
1. Источник данных для вычисления всего 1, в него вносят и выносят. Параллельное выполнение уже невозможно без костылей. 2. Да, 3 потока стартуют одновременно, НО пока первый не закончит, 2 и 3 нечего делать, когда начнет работать 2, 3 будет стоять т.к. для него данные не готовы. _ Итого, мы реализовали 3х поточный аналог функций, при этом потратив впустую время и ресурсы и не преуспели со скоростью вычислений. Мне сложно разбить задачу ТС и привести пример потому я абстрагируюсь: Представим что есть завод по сборке деталей. Состоит из 3 цехов: распаковка деталей со склада, сборка деталей в продукт, упаковка продукта. Дали партию деталей 200 шт. Вернемся к коду: 3 цеха это 3 цикла: Код:
Цитата:
Чтобы работать сообща нужна всего 1 вещь: конвейерная лента. С помощью неё возможно следующее: Поставили деталь А на ленту __ 1 цех обработал А, передает А в цех 2, сообщает в цех 3, сколько осталось на складе, ждет сообщения от 2го, что тот получил без брака __ Цех 2, получил деталь А, сообщает цеху 1, что тот может распаковать деталь Б но не отсылать __ Цех 2 обработал деталь А, и послал её в цех 3, сообщил цеху 1 что готов к работе с Б, цех 1 передает Б __ Цех 3 просто обрабатывает детали, будучи информированным от цеха 1, см узнает когда "это последняя деталь". Или же это можно делать в конце: Цех 1 сообщает в цех 2 и так до цеха 3. Таким образом время на выполнения обработки сокращается в 3е, т.к. все 3е работают одновременно и сообща. В роли конвейера может выступать буфер данных, массив из N ячеек, который передается между потоками. Последний раз редактировалось Человек_Борща; 14.07.2013 в 04:46. |
||
14.07.2013, 05:05 | #18 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
с тем же заводом решение просто, каждый цех должен делать часть от общего заказа.
а если именно каждый цех чтото отдельное делает, то решение примерно такое(хотя можно и исходным массивом обойтись, но это чуток сложнее) я бы не пихал на практике каждую функцию отдельно, а просто создал один тип потока, и ему сообщал указатель на массив и его диапазон вычислений, и пусть со своим диапазоном че хочет, то и творит. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 14.07.2013 в 05:07. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с потоками | -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 |