![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте, есть поток, в котором выполняется определнный код
Код:
procedure TMyThread1.DoWork; begin for i:=0 to Form1.Listbox1.items.count - 1 do begin // end; end; Уважаемые знатоки, вопрос: "Как сделать мой этот цикл в 10 потоках? или более" ? Отвечает... |
#2
|
|||
|
|||
![]() В потоках не шарю, но я бы сделал, чтобы поток работал с одним итемом, который при создании ему передается, и при нажатии на кнопку создать по потоку на каждый итем
|
#3
|
|||
|
|||
![]() Цитата:
![]() |
#4
|
||||
|
||||
![]() Я в потоках шарю, но все равно не могу понять в чем задача заключается.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
|||
|
|||
![]() Цитата:
Я сейчас создал массив потоков, вроде все нормально, но каждый из потоков берет одинаковый итем из ЛистБокса, что не желательно... |
#6
|
||||
|
||||
![]() Можно создать n-е кол-во потоков с такимусловием, что кадый поток будет обрабатывать свой диапазон айтемов.
Или я чето не понимаю в твоей %PROGRAM%. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
|||
|
|||
![]() От лукавого всё это, имхо надо один поток - один итем
Ежели хочется чтобы было 10 одновременно, то запускать их с перерывом в среднеевремяжизни/10 сек |
#8
|
|||
|
|||
![]() Да не, нужен просто стек заданий.
Каждый поток просто будет брать очередное задание из очереди и обрабатывть его. Если очередь пуста, то поток отключается. Код:
var CS : TCriticalSection; procedure TMyThread.Execute; var AItem : String; HaveWork : Boolean; begin HaveWork := True; While HaveWork Do begin Sleep(30000); // Твоя задержка S := ''; CS.Enter; Try If MainForm.List1.Items.Count > 0 Then Begin AItem := MainForm.List1.Items[0]; MainForm.List1.Items.Delete(0); End; Finally CS.Leave; End; HaveWorl := S <> ''; If HaveWork Then ProcessItem(AItem); // обработка задания end; // While end; |