![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
Доброго времени суток!
я уже поднимал эту тему, но ответа не получил. повторюсь нучжно перемножить матрицу на вектор, но чтобы каждое новое значение в результирующем векторе (для тех кто забыл мат-ку матрица*вектор=вектор) высчитывалось в отдельно потоке. Буду очень благодарен за пример --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Ronin08, вот та самая тема. Скажите, пожалуйста, точно : на какой вопрос Вы не получили ответ? Требуется ли решить вместо Вас поставленную задачу?
Пример Это сообщение отредактировал(а) marcusmae - 28.3.2008, 22:29 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
ни в коем случае
просто я не могу въехать как передать одной функции другую понимаю что с помощью делегатов но видимо что-то не улавливаю вот как я делаю
Это сообщение отредактировал(а) Ronin08 - 28.3.2008, 22:54 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| marcusmae |
|
||||||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Изучите по-подробнее делегаты - будет проще. Дело в том, что там не нужно создавать свой собственный делегат, а нужно лишь указать функцию, подходящую под сигнатуре конкретному делегату - ParameterizedThreadStart (упоминал его в предыдущей теме!)
Функция Potok по аргументам не подходит, поэтому я создаю ещё одну, которая будет служить "подложкой" для вызова :
- просто доверительно преобразуем аргументы из неизвестно чего в пару индексов и тройку матриц. Далее, раз процедура потока у нас имеет аргументы, то при старте потока мы могли бы их инициализировать. Следующий код закомментирован, подставьте в него актуальные параметры :
Наконец, стартуем поток с данными аргументами :
Итого, получается следующая заготовка :
Продолжайте, если будут вопросы - всегда пожалуйста! -------------------- ἀπὸ μηχανῆς θεός |
||||||||||
|
|||||||||||
| Ronin08 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
а как быть в случае, когда мы не знаем при компиляции сколько потоков будет пользователь сам должен вводить я сделал цикл с 4 потоками для примера Это сообщение отредактировал(а) Ronin08 - 28.3.2008, 23:14 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||
|
|||||
| Dennnis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Правильно, там где ты указал есть проблема, но не толко там. Делегат - это указатель на функцию. Это значит что ему необходимо задать функцию, которую он будет вызывать при выполнении. Причем ThreadStart и есть делегат вида delegate void ThreadStart(). Он тебе не подходит, нужен ParameterizedThreadStart.
Вот примерно как надо (сам не проверял
--------------------
Get Rich or Die Tryin' |
|||
|
||||
| marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Если Вы хотите, чтобы пользователь задавал число потоков - так и сделайте : считайте число в переменную и укажите эту переменную в качестве границы цикла. Лучше не надо так говорить. Если те, кто так говорят не понимают различий, то это ещё не значит, что их нет. Делегат - это делегат. Указатель на функцию - это указатель на функцию.
Если Он - это делегат, то нет, не значит. Функцию будет вызывать поток, а делегат здесь является способом указания метода в качестве аргумента конструктора класса Thread. А в чём моя ошибка и что изменилось?
- так можно Метод Potok c явным указанием типов зря убрали - пусть бы другой, c object, его вызывал, зато аккуратно. Хотя, дело вкуса. А, или эта реплика - не мне? Это сообщение отредактировал(а) marcusmae - 28.3.2008, 23:52 -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
| Ronin08 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
Dennnis, в этом случае проблемка с
Ошибка:Unable to cast object of type 'System.Int32' to type 'System.Int32[,]'. у нас ведь двумерный массив Добавлено через 4 минуты marcusmae , в месте
Ошибка: Object reference not set to an instance of an object. --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||
|
|||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Аргументы указали там где было закомментировано? Какие?
Копипаст :
-------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| Ronin08 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
вот такие:
Это сообщение отредактировал(а) Ronin08 - 30.3.2008, 01:17 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||
|
|||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Ronin08, странно это видеть при том, что Вы вроде бы располагаете готовым кодом, понимаете алгоритм и представляете, каким образом его разделять на потоки. В t.Start Вам нужно передать аргументы - те самые аргументы, с которыми будет работать вложенный цикл в процедуре Potok. У Вас они называются Arr1, Arr2, Arr3, i - это индекс строки, j - индекс столбца. Оба индекса Вы фиксируете. Следовательно, цикл, вероятно, должен содержать что-то вроде :
В этом случае потоков будет создано в количестве m * n. Вы, кажется, хотите делать меньше?.. Тогда нужно сделать ещё один цикл внутри функции Potok, который будет перебирать индексы i,j в диапазоне, отведённом каждому потоку (передавать границы диапазонов в качестве параметров). Я понятно излагаю?.. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Dennnis |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Точно Wikipedia:
Моя ошибка, вобщем вот как надо:
Это сообщение отредактировал(а) Dennnis - 30.3.2008, 11:28 --------------------
Get Rich or Die Tryin' |
||||||
|
|||||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
marcusmae и Dennnis спасибо за ответы,
но вот возникла новая проблема. В нашем коде, потоки запускаются в цикле поочереди, но надо сделать так чтобы они запускались одновременно. Как это можно организовать? --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Модератор: Пожалуйста, один топик - один вопрос.
-------------------- ![]() |
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: 1 Всего: 1 |
так это ведь все одна и та же тема
"Перемножение матриц при вычислениии эллементов матрицы в разных потоках, с одновременным запуском потоков" --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |