Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2012, 19:13   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Радость Порезать на кусочки содержимое TList

Собственно всем лучей добра и света!

Есть некий TList заполненный до верху объектами.
Необходимо раздать содержимое нескольким потокам так, чтобы каждый поток получил свой уникальный кусок.




Как это сделать?

Мозг просто вскипает уже...
Человек_Борща вне форума Ответить с цитированием
Старый 26.12.2012, 19:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да в каждом потоке описать целочисленные переменки, которые будут хранить номер начальа куска списка и конца. И пусть работают от и до
Речь ведь о TThread идет?
Код:
My=TThread
public
 BeginI,EndI:Integer;
...
end;

procedure my.execute
begin
 for i:=BeginI to EndI do
  ...
  List[i} ченить там.
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.12.2012, 21:38   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Если не обязательны куски (ну мало ли), то можно сделать 1 переменную, которая указывает на следующий объект для обработки (увеличивать переменную в критической секции). Тогда каждый поток будет забирать следующий объект, как только обработает предыдущий.
Тапками не кидать
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.12.2012, 22:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
BDA
Т.е. предлагаешь переключаться между процессами? Такой себе а-ля менеджер потоков.
Хорошо бы узнать что именно и как обрабатываться в списках будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.12.2012, 22:19   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Т.е. предлагаешь переключаться между процессами?
Не знаю (очень мало работал с потоками)
Вроде это не переключение.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хорошо бы узнать что именно и как обрабатываться в списках будет.
А вот это действительно неплохо бы, а то можно насоветовать такого.

Update
Цитата:
Каждый объект уникален и не должен попасть на обработку повторно.
Имхо, вариант, много касс (потоков), 1 очередь (1 список объектов), покупатель (объект) идет к первому освободившемуся кассиру (потоку) вполне Вам подойдет. Ведь если какой-либо из потоков начнет медленнее обрабатывать, то все сработает медленнее
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 26.12.2012 в 22:26.
BDA вне форума Ответить с цитированием
Старый 26.12.2012, 22:19   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Stilet, многопоточная обработка данных.
Каждый объект уникален и не должен попасть на обработку повторно.
Как я вижу эту делянку, показано на скрине в посте 1.
Человек_Борща вне форума Ответить с цитированием
Старый 26.12.2012, 22:35   #7
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Тоже интересует тема. Человек_Борща, вот незадача... Парюсь уже целый час, толком дойти до путевого не получается. Если даже делить кол-во потоков на длину, то получается совсем даже не integer
P.S. Может попросить математиков чтобы вывели формулу алгоритма, а...
Lardes вне форума Ответить с цитированием
Старый 26.12.2012, 22:38   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

http://habrahabr.ru/post/91082/
А как Вам такой вариант?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.12.2012, 22:44   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А мне больше по душе вариант, который BDA предложил - каждый поток забирает по мере необходимости очередной объект. Так более рационально пожалуй можно нагрузку на потоки распределить. При изначальном примерно равном распределении по потокам объектов может получиться так, что часть потоков быстрей справится, часть медленней. Или нет?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.12.2012, 22:44   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
BDA
Без дотнета я так понимаю облом?
Между прочем в дотнете есть среьезная наработка технологии распределенного вычисления - тут не поспоришь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Tlist AngryD Помощь студентам 2 24.02.2012 12:22
Не открывая txt порезать его на читабельные куски. Человек_Борща Общие вопросы Delphi 5 03.01.2011 18:06
Порезать строчку KoBRaAndrey Общие вопросы Delphi 3 30.04.2010 11:27
Кусочки акуст. концерта HellMercenariess Свободное общение 0 05.10.2009 13:58
Подкорректирова tList Altera Общие вопросы Delphi 2 11.09.2009 20:24