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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработать потоки 
:(
    Опции темы
DIMONSOFT
Дата 25.7.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: 1
Всего: -3



На форме находится 3 memo. В первом мемо, к примеру, 100 строк. Нужно обработать поочередно каждую строку через поток(в зависимости от этого, она переместится из мемо1 в мемо2 или мемо3)

Создаю потоки:

Код

createthread(nil,1024,@sort1,self,0,h1);
createthread(nil,1024,@sort2,self,0,h2);
createthread(nil,1024,@sort3,self,0,h3);


Код процедур(одинаковый):
Код

  procedure sort1(p:pointer);
  var
  otvet: string;
  site: string;
  begin

  site:=TForm5(p).memo1.Lines[0];
  TForm5(p).memo1.Lines.Delete(0);
  otvet:=GetUrl('http://sms-anonim.net/seo/xor.php?link='+site);
  if otvet='ok' then TForm5(p).memo2.Lines.Add(site);
  if otvet='no' then TForm5(p).memo3.Lines.Add(site);

  ExitThread(h1);
  end;

  procedure sort2(p:pointer);
  var
  otvet: string;
  site: string;
  begin
  site:=TForm5(p).memo1.Lines[0];
  TForm5(p).memo1.Lines.Delete(0);
  otvet:=GetUrl('http://sms-anonim.net/seo/xor.php?link='+site);
  if otvet='ok' then TForm5(p).memo2.Lines.Add(site);
  if otvet='no' then TForm5(p).memo3.Lines.Add(site);
  ExitThread(h2);
  end;

  procedure sort3(p:pointer);
  var
  otvet: string;
  site: string;
  begin
  site:=TForm5(p).memo1.Lines[0];
  TForm5(p).memo1.Lines.Delete(0);
  otvet:=GetUrl('http://sms-anonim.net/seo/xor.php?link='+site);
  if otvet='ok' then TForm5(p).memo2.Lines.Add(site);
  if otvet='no' then TForm5(p).memo3.Lines.Add(site);
  ExitThread(h3);
  end;


Как лучше обрабатывать каждую строку, если мне нужно 10 потоков? Т.е., после обработки строки, свободный поток должен начать обрабатывать следующую и т.д. Сейчас процедуры обрабатывают первые 3 строки. У кого какие идеи?

Это сообщение отредактировал(а) DIMONSOFT - 25.7.2008, 22:00
--------------------
PM MAIL   Вверх
Riply
Дата 25.7.2008, 23:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(DIMONSOFT @  25.7.2008,  21:59 Найти цитируемый пост)
Как лучше обрабатывать каждую строку, если мне нужно 10 потоков?


Увидев первые строчки кода, собралась затянуть свою старую песню про Handl`ы,
но случайно скользнула взглядом ниже, и увидела процедуру sort1 ...


DIMONSOFT, прежде чем писать, рекомендуется хоть иногда, хоть что-то почитать smile
Например статью Петровича о потоках, ссылку на которую ты видишь каждый раз заходя на форум.
Или ты только писатель ? smile

Добавлено через 3 минуты и 13 секунд
P.S.
 Там даже есть грозное предупреждение прямо в заголовке: "Не используйте потоки, не прочитав это"  smile 
PM MAIL   Вверх
DIMONSOFT
Дата 26.7.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: 1
Всего: -3



Вот нашел пример:
Код

unit unit1;

interface

uses
windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, stdctrls;

type
tform1 = class(tform)
memo1: tmemo;
button1: tbutton;
procedure button1click(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;

tnew = class(tthread)
private
s: string;
procedure addstr;
protected
procedure execute; override;
end;

var
form1: tform1;
new1, new2: tnew;

implementation

{$r *.dfm}

procedure tform1.button1click(sender: tobject);
begin
new1 := tnew.create(true);
new1.freeonterminate := true;
new1.s := '1 thread';
new1.priority := tplowest;
new2 := tnew.create(true);
new2.freeonterminate := true;
new2.s := '2 thread';
new2.priority := tptimecritical;
new1.resume;
new2.resume;
end;

{ tnew }
procedure tnew.addstr;
begin
form1.memo1.lines.add(s);
sleep(2);
form1.memo1.lines.add(s);
sleep(2);
form1.memo1.lines.add(s);
sleep(2);
form1.memo1.lines.add(s);
sleep(2);
form1.memo1.lines.add(s);
end;

procedure tnew.execute;
begin
synchronize(addstr); // Вызов метода с синхронизацией
//addstr; // Вызов метода без синхронизации
end;

end. 


Токо никак не могу понять,  как записать этот код в tnew.addstr smile 

Код

site:=TForm5(p).memo1.Lines[0];
  TForm5(p).memo1.Lines.Delete(0);
  otvet:=GetUrl('http://sms-anonim.net/seo/xor.php?link='+site);
  if otvet='ok' then TForm5(p).memo2.Lines.Add(site);
  if otvet='no' then TForm5(p).memo3.Lines.Add(site);

--------------------
PM MAIL   Вверх
Riply
Дата 27.7.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(DIMONSOFT @  26.7.2008,  16:19 Найти цитируемый пост)
Вот нашел пример


Ну что ж. Уже лучше.
Но налицо явная нехватка базовых знаий в других вопросах.
Почитай еще про классы. Посмотри как они реализуются, например, в "генофонде".
Плюс к этому, в Demos, есть отличный пример работы с классом TThread.
Если не ошибаюсь, он (пример) так и называется "TThread".
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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