Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Вниз

TTcpClient в оддельный паток   Найти похожие ветки 

 
alex-drob   (2008-06-03 14:59) [0]

Подскажите пожалуйста, как вынести 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.


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


 
Anatoly Podgoretsky ©   (2008-06-03 15:06) [1]

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


procedure Client.Execute;
begin

end;

end.


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


 
Palladin ©   (2008-06-03 15:18) [2]

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


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

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


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

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


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


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

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


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

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


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


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

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

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


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


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


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


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


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


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


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

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


 
Palladin ©   (2008-06-03 18:14) [11]

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


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

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


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

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

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


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


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


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

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


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

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


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

Угу.


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


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

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


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

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


 
alex-drob   (2008-06-03 19:30) [18]


> Ну и чуток кода написать.

а где можно прочитать про это, или пример небольшой, а то у меня не работает


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


> этот режим не совсем так работает


Не совсем как ?


> мне он не подойдёт наверное, программа так неконектиться


И не будет, пока не будешь читать документацию.


 
alex-drob   (2008-06-03 19:35) [20]

я бы почитал, но в моеё делфи нет справки!


 
Сергей М. ©   (2008-06-03 19:35) [21]


> alex-drob  


Ты бы хоть платформу обозначил, на которой твое творчество тобой планируется эксплуатировать ..


 
Сергей М. ©   (2008-06-03 19:36) [22]


> я бы почитал, но в моеё делфи нет справки


Найди !


 
alex-drob   (2008-06-03 19:41) [23]

winXP Delphi 2005


 
Сергей М. ©   (2008-06-03 19:46) [24]

А что, в Д2005 не наблюдается пакета dclsocketsXX.bpl (TSocketServer/Client) ?


 
alex-drob   (2008-06-03 19:50) [25]

в каком смысле? есть


 
Сергей М. ©   (2008-06-03 19:56) [26]


> в каком смысле?


В прямом.


> есть


Ну и нафих тебе TTCPClient, если иемется полноценный TClientSocket ?


 
alex-drob   (2008-06-03 20:02) [27]

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


 
Сергей М. ©   (2008-06-03 20:11) [28]


> как TClienSocket подключить? всмысле какой модуль?


А что тогда подразумевалось под "есть" (см. [25]) ?


 
alex-drob   (2008-06-03 20:35) [29]

всмысле есть файлик dclsockets90.bpl


 
Сергей М. ©   (2008-06-03 20:49) [30]


> всмысле есть файлик dclsockets90.bpl


Чудесно.

Инсталлируй его (меню Install Package) и в палитре появятся компоненты TServerSocket и TClientSocket


 
alex-drob   (2008-06-03 20:54) [31]

Спасибо за помощь, сейчас поставлю!


 
alex-drob   (2008-06-03 21:09) [32]

поставил, только пока не понял чем он лудше?


 
Сергей М. ©   (2008-06-03 21:28) [33]


> чем он лудше?


он не "лудше" и не "худше" - он совмещает в себе всю функциональность TTCPClient/Server + предусматривает асинхронную нотификуцию о событиях гнездового транспорта (т.е. то чего не предусмотрено и, как правило, не достает в TTCPClient/Server в неблокирующем режиме)


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

ясно, буду искать документацию на эту тему, а есле я уже много кода написал, с tcpclient, не сложно будет переделать?


 
ANB   (2008-06-05 11:58) [35]


> а есле я уже много кода написал, с tcpclient

Глупый вопрос - нафига писать много кода, если еще не освоил технологию работы с неизвестной тебе библиотекой ?


 
alex-drob ©   (2008-06-05 12:38) [36]

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


 
Сергей М. ©   (2008-06-05 12:59) [37]


> есле я уже много кода написал, с tcpclient, не сложно будет
> переделать?


Мне не сложно. Тебе - не знаю)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.043 c
2-1212990723
Mishenka
2008-06-09 09:52
2008.07.06
Как сделать панель наподобие инспектора объектов в Delphi ?


15-1211272490
azamatufa
2008-05-20 12:34
2008.07.06
Почему хвост форума периодично обрезается???


15-1211734774
DVM
2008-05-25 20:59
2008.07.06
Что за программа так оформляет код?


3-1201365475
leonidus
2008-01-26 19:37
2008.07.06
Ищу простую СУБД


8-1182518764
Рацелий
2007-06-22 17:26
2008.07.06
Симуляция и анимация текстурой движения цвета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский