Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TTcpClient в оддельный паток


Страницы:   1 2

alex-drob ©   (2008-06-03 14:59:00) 

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

делаю так:


unit Unit2;

interface

uses
 Classes, sockets, unit1;

type
 Client = class(TThread)
 private
   ftcp:ttcpclient;
   procedure getdata;
   procedure senddata(ms:TMemoryStream);
 protected
   procedure Execute; override;
 public  
   constructor create(h,p:pchar);
 published
   procedure getdata;
   procedure senddata(ms:TMemoryStream);
 end;

implementation

constructor Client.create(h,p:pchar);
begin
 inherited Create(True);
 ftcp:=ttcpclient.Create(nil);
 ftcp.RemoteHost:=h;
 ftcp.RemotePort:=p;
end;

procedure client.getdata;
begin
 ftcp.ReceiveBuf(buf,len);
end;

procedure client.senddata(ms:TMemoryStream);
begin
 ftcp.SendStream(ms);
end;

procedure Client.Execute;
begin

end;

end.


не получаеться, кк можно такое организовать?


alex-drob   (2008-06-03 19:29:00) [21]

я так понял что этот режим не совсем так работает, мне он не подойдёт наверное, программа так неконектиться


ANB   (2008-06-03 19:28:00) [22]


> т.е. если включить неблокирующий режим, то будет всё также
> работать, только без застывания программы?

Ну и чуток кода написать.
Т.е. надо организовать ожидание завершения операции. Если этого требует задача, есно. Может получится, что вообще ничего писать не надо.
Но во всяком случае кода будет намного меньше (и сопутствующих граблей), чем при работе с потоками.


Сергей М.   (2008-06-03 19:23:00) [23]

Угу.


alex-drob   (2008-06-03 19:21:00) [24]

т.е. если включить неблокирующий режим, то будет всё также работать, только без застывания программы?


Сергей М.   (2008-06-03 19:13:00) [25]


> мне нужно просто чтобы програма не подвисала когда данные
> передаються, у инди есть компанент антифриз


Инди не работает в асинхронном неблок.режиме, зпоетому для формошлепов индейцы и предложили этот самый "антифриз".

А TTCPClient, в отличие от TIdTCPClient, умеет работать и в неблокирующем режиме, потому антифриз ему нафих не нужен.


alex-drob   (2008-06-03 19:11:00) [26]

Уважаемые программисты!
Для начала хочу выразить искреннюю благодарность создателю замечательного сайта в интернете “Мастера DELPHI” ( http://delphi.mastak.ru), конференции для программистов - Алексею (Merlin).
Я думаю, что со мной согласятся многие, если скажу, что конференции помогли и помогают многим программистам в их нелегком труде.
До сих пор не встречал такого живого форума и такой атмосферы взаимопомощи на просторах интернета.
Конференции стали неплохим подспорьем программистам в их деятельности.
Постоянно посещая форум, я заметил, что некоторые вопросы довольно часто повторяются. Желание помочь коллегам и позволило появиться в свет этой статье.
Надеюсь, что некоторые приемы, описанные ниже, будут полезны и профессионалам.
Версии Windows ниже 98 безвозвратно уходят в прошлое, поэтому особенности программирования для них мы рассматривать не будем.


из статейки! да давно она писалась, тогда ещё оказываеться здесь помогали... нет я не говорю что сейчас здесь не помогают, просто, эта тема здесь уже не раз обсуждалась, сейчас больше жаждущих подколоть, поспорит, а раньше я помню всё таки отвечали на вопросы больше! а сейчас, посмотри по вопросам, ответы:
-смотри спавку
-ya.ru
-google.com
-ttreeview + f1

зато если ктото напишет чтото по теме вопроса, то обязательно найдёться человек который напишет: та, это что, я вот могу круче...

вобщем тема закрыта


Palladin   (2008-06-03 18:14:00) [27]

ну ты же "нашол у себя одну статеку про потоки" чего еще надобно?


alex-drob   (2008-06-03 18:10:00) [28]

мне нужно просто чтобы програма не подвисала когда данные передаються, у инди есть компанент антифриз, но мне не очень удобно с индитспклиентом работать


Сергей М.   (2008-06-03 17:18:00) [29]


> я бы со своей формы мог передать в тот поток данные и вызвать
> его функцию SendBuf или ReceiveBuf и получить ответ


Синхронно ?
Тогда доп.поток нафиг не нужен


Сергей М.   (2008-06-03 17:09:00) [30]


> и посылал каждые 30 сек сообщения на сервер (для поддержания
> подключения)


Подключение живет своей собственной жизнью, от того, будешь ты его дергать хоть каждую секунду или не будешь трогать вообще, эта жизнь не станет ни короче ни длиннее.


ANB   (2008-06-03 16:58:00) [31]


> alex-drob   (03.06.08 15:47) [6]

Пользоваться можно. Но ОЧЕНЬ аккуратно. Настолько аккуратно, что лучше, по возможности, вообще не заморачиваться с потоками.

А если уж другого выхода нет - сначала очень досконально изучить эту тему, так как вариант "кинул поток, написал код, компилится - значит ботает" тут не проканает.


alex-drob   (2008-06-03 15:47:00) [32]

нашол у себя одну статеку про потоки, я так понял что из своей программы я не смогу пользоваться функциями которые в другом потоке?
т.е. например я хотел чтобы в отдельном потоке tcpclient был подключен к серверу и посылал каждые 30 сек сообщения на сервер (для поддержания подключения), а когда мне нужно, то я бы со своей формы мог передать в тот поток данные и вызвать его функцию SendBuf или ReceiveBuf и получить ответ


Anatoly Podgoretsky   (2008-06-03 15:37:00) [33]


> вот только справки у меня нет!

Вот с этого надо и начинать, с починки справки.


alex-drob   (2008-06-03 15:21:00) [34]

а как сделать, чтобы програма не застывала? без отдельного потока


alex-drob   (2008-06-03 15:18:00) [35]

вот только справки у меня нет!
пишет visual studio net is unable load что там не помню


Palladin   (2008-06-03 15:18:00) [36]

а может не надо?


Anatoly Podgoretsky   (2008-06-03 15:06:00) [37]

> alex-drob  (03.06.2008 14:59:00)  [0]


procedure Client.Execute;
begin

end;

end.


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо