Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос про потоки 
:(
    Опции темы
genna29
Дата 10.10.2012, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.10.2012

Репутация: нет
Всего: нет



Добрый день. Не работал раньше с потоками, столкнулся с следующей задачей. Имеется stringlist,
в нем некоторое количество например ссылок. для каждой ссылки создаю поток(MyTh1), скачиваю в нем
информацию, разбитую на блоки. Каждый блок нужно обработать в потоках(MyTh2), количество которых
ограниченно threadscount. вопрос в том, как передать данные для обработки в виде массива из TMyRecord1 в поток MyTh2,
если он локален в первом потоке...
Заранее спасибо за советы

Код

TMyRecord1=record
var1:string;
var2:integer;
end;

TMyRecord2=record
var1:string;
var2:integer;
end;



TMyTh1=class(TTHread)
..
TMyTh2=class(TThread)
private 
    arraylength:word;
..
var
    result:array of TMyRecord2;
    current1,current2:Word;
procedure start;
var 
    target:Tstringlist;
    MyThs1=array of TMyTh1;
begin
    current1:=0;
    for i:=0 to Target.count -1 do
    begin
        SetLength(MyThs1,i+1);
        MyThs1[i]:=Myths1.Create(false);
    end;    
end;

procedure MyTh1.Execute;
var
    cs:tcriticalsection;
    targetline:string;
    target2:array of TMyRecord1;
    myths2:array of Myth2;
begin
    cs:=tcriticalsection.create;
    cs.enter;
        targetline:=Target[i];
        inc(i);
    cs.leave;
    cs.free;
    while process(targetline) do
    begin
        l:=length(target2);
        setlength(target2,l+1);
        target2.var1:=...
        target2.var2:=...
    end;
    setlength(myth2,threadscount);    
    for i=0 to threadscount - 1 do
    begin
        myths2[i]:=Tmyth2.create(true);
        myths2[i].arraylength:=length(target2);    
    end;        
end;
Procedure MyTh2.execute;
var
    cs:tcriticalsection;
begin
    cs:=tcriticalsection.create;
    while i<arraylength do
    begin
        cs.enter;
        inc(i);
        cs.leave;
        //здесь надо обработать массив target2 
        //и записать результаты в массив result,
        //общий для всех потоков...
    end;
    cs.free;
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0392 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.