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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 08:32   #1
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию Потоки и компоненты в них

Здравствуйте, уважаемые!
Столкнулся с проблемой, хотелось бы послушать ваши советы...

Программа создает при необходимости новый поток. Поток создает компонент. Как можно передать данные этому компоненту? Потоку назначил проперти Tag, пот создании компонента значение этого проперти назначается одноименному проперти компонента...

Конкретный пример:
Пишу тунеллер. На форме имеется TServerSocket, который принимает входящие подключения (от браузера к примеру). По теории нужно создать TClientSocket на внешний прокси и передать ему данные, которые получил сервер.
При установлении коннекта сервером - создаю новый поток, ему передаю значение SocketHandle (просто в качестве идентификатора Tag для клиента), новый поток стартует и создает клиент, клиент коннектится. Как можно найти указатель на этот клиент? Как правильнее передать ему пакет данных?

Заранее благодарен!

ПыСы: в ветку "Работа с сетью" пожалуйста не перекидывайте, проблема не с сетями, а с поиском указателя на компонент.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 10.06.2010, 08:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну опиши свойство public, переменную, в которую создаешь экземпляр класса (компонент свой) тогда и обращайся к нему как к свойству потока.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2010, 09:19   #3
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Проблема в другом... потоков будет довольно много, 10-20, в зависимости от активности браузера... проблемы у меня вызвало какраз нахождение нужного потока. КлиентСокет у меня итак в публике, а ещё есть проперти потока Tag, которое тоже в публике. Как правильно найти нужный поток (с указаным тэгом) ?
И ещё обращаться придется во время исполнения потока... передавать данные то надо незамедлительно, иначе лаги будут...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 10.06.2010, 12:21   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Все потоки забиваются в массив.
Или сделать событие потоку, в котором он будет передавать Sender: TObject
TwiX вне форума Ответить с цитированием
Старый 10.06.2010, 12:26   #5
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

пример можно?
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 10.06.2010, 13:36   #6
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Код:
var
  Form1: TForm1;
  a: array of TThread;
  thrdsDone, thrds: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin

    thrds:=StrToInt(Edit1.Text);
    SetLength(a, thrds);
    thrdsDone:=0;
    for i := 0 to thrds - 1 do
    begin
      a[i]:=TThread.Create(false, '25a2fb63649d');
      a[i].tag:=i;
      a[i].OnDone:=ThrdDone;
    end;
end;
TwiX вне форума Ответить с цитированием
Старый 10.06.2010, 15:22   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)внутрь Tag можно передать указатель на обьект(на всякий говорю что просто переменную любого класса) с приведением типов.
2)можно описать поток, и задать ему нужные св-ва(поля класса), так и конструкторы и прочее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows 7 какая из них? melomandk Windows 1 26.04.2010 08:13
Переписать в файл Т2 все компоненты файла Т1 с заменой в них символа «0» на символ "1" АполинАрия Помощь студентам 2 31.05.2009 23:45
Сделаем из них чебурашек! alexinspir Свободное общение 2 01.01.2009 11:30
Циклы и выход из них. alikk Общие вопросы Delphi 23 13.04.2008 08:44