Форум: "Начинающим";
Текущий архив: 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.046 c