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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2010, 23:56   #1
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию Как правельно организовать взаимодействие потоков ?

Вот у меня к вам такой вопрос: как с помощью потоков наотправлять сообщений icq ?

У меня есть 4 потока - 3 будут заполнять а 4 запускается для "контролирования".
Вот все 3 потока которые будут отправлять месагу:
Код:
procedure Tnew1.Execute(i:integer);
begin
  Form1.ICQClient1.SendMessage(i,'ПОТОК НОМЕР 1');
  Form1.ICQClient1.Disconnect;
end;

procedure Tnew2.Execute(i:integer);
begin
  Form1.ICQClient2.SendMessage(i,'ПОТОК НОМЕР 2');
  Form1.ICQClient2.Disconnect;
end;

procedure Tnew3.Execute(i:integer);
begin
  Form1.ICQClient3.SendMessage(i,'ПОТОК НОМЕР 3');
  Form1.ICQClient3.Disconnect;
end;
В 4 потоке я хотел бы распределять данные между двумя этими:
Код:
procedure Tnew4.Execute;
var new1: Tnew1;
    new2: Tnew2;
    new3: Tnew3;
begin
 new1:=tnew1.Create(true);
  new1.Priority:=tpLower;
  new1.Resume;
 new2:=tnew2.Create(true);
  new2.Priority:=tpLower;
  new2.Resume;
 new3:=tnew3.Create(true);
  new3.Priority:=tpLower;
  new3.Resume;
end;
В 4 потоке я убрал "авторазрушение" потока - сделаю это в самом конце.
По нажатию кнопки запускается 4 потом который создает осальные.
Теперь предположим в списке ListBox находятся уины.
По нажатию на кнопку вписал:
Код:
new4:=tnew3.Create(true);
  new4.Priority:=tpLower;
  new4.Resume;
Вопрос: как потоку 4 узнать что выполнился один из 3 потоков ? Может можно каким либо способом в 4 потоке создать таймер который будет определять мол
Код:
if new1.complete=true then Tnew1.Execute(form1.listbox.lines[0]);
а во все потоки добавить чтоыб после того как взяли первую строку - удаляли ее. И так каждый потмо будет брать первую строку удаляя ее.
kakawkin вне форума Ответить с цитированием
Старый 26.09.2010, 08:55   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Код:
var
ThredArray: array of TNewThread;

...

setlength(ThredArray,length(ThredArray)+1;
ThredArray[high(ThredArray)]:=TNewThread.Create(true);
...
и работайте как с массивом и как с потоком. есть элемент массива - значит есть поток,
if ThredArray[0]<>nil then {поток существует}

у пототока (у элемента массива) можно назначать проперти или переменные, и доступ к ним по:
ThredArray[0].TestVariable:=123;
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 26.09.2010, 12:34   #3
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

а как назначить тело потока если создаем из массива не подскажите плз ??? и вопрос остался не раскрытым:
если будет поток созданный из массива который делает следующее:
1) перенной s присваивает из listbox 0 строку
2) удаляет
3) отправляет сообщение на номер который в переменную s

тоесть могут работать сразу 10 потоков - токо надо следующее:
не дать сразу потокам 10 взять одну строку (как без настроек будет в самом начале программы). И таймеров чтоли отслеживать - мол в листе 0 строк - остановить и разрушить потоки
kakawkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правельно спарсировать ? kakawkin Общие вопросы Delphi 1 31.07.2010 13:29
организовать взаимодействие между формами, как? lexluter1988 Общие вопросы .NET 1 21.05.2010 06:49
Взаимодействие потоков у Windows XP MIKI Win Api 2 28.05.2009 19:13
Как правельно поставить for между if и and Des Общие вопросы Delphi 3 07.05.2009 10:18
Как правельно составить запрос!! Areostar SQL, базы данных 3 16.02.2008 19:49