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

Вниз

Помогите понять ServerSocket и его метод GetThread!!!   Найти похожие ветки 

 
Chak   (2003-03-05 11:04) [0]

Я непонимаю, как нужно использовать var SocketThread: TServerClientThread и как предопределить ClientExecute!!! Помогите разобраться.


----------------------------------------
procedure TMain.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread:=TSocketFileThread.Create(true,ClientSocket);
end;
----------------------------------------
...
TSocketFileThread= class(TServerClientThread)
private
FSocket: TServerClientWinSocket;
procedure SocketRead;
{ Private declarations }
protected
procedure ClientExecute; override;
public
constructor Create(NoStrart:Boolean; Socket: TServerClientWinSocket);
end;
...

constructor TSocketFileThread.Create(NoStrart:Boolean; Socket: TServerClientWinSocket);
begin
inherited Create(True,Socket);
FSocket:=Socket;
FreeOnTerminate := True;
Resume;
end;
...

procedure TSocketFileThread.ClientExecute;
begin
while (not Terminated) and ClientSocket.Connected do
begin
Synchronize(SocketRead);
inherited ClientExecute;
end;
end;
...



И еще по ходу вопрос: у меня ServerSocket1.SetverType:=stThreadBlocking
что должно стоять у клиента в свойстве ClientType?


 
Digitman   (2003-03-05 11:17) [1]

procedure TSocketFileThread.ClientExecute;
begin
while (not Terminated) and ClientSocket.Connected do
begin
// Synchronize(SocketRead); синхронизации нужно избегать и использовать только по реальной необходимости, иначе все преимущества мультипоточной параллельной обработки сводятся на нет
// inherited ClientExecute; это не нужно
end;

... здесь ты просто работаешь с методами приема/передачи объекта, ссылка на который передана тебе в конструкторе (св-во ClientSocket)

end;

1.
private
FSocket: TServerClientWinSocket;

это поле - лишнее, оно дублирует св-во ClientSocket

2.
FreeOnTerminate := True;

это недопустимо - диспетчеризацией/уничтожением твоего объекта-потока "заведует" кэш-менеджер объекта TServerWinSocket.


> у меня ServerSocket1.SetverType:=stThreadBlocking
> что должно стоять у клиента в свойстве ClientType?


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


 
Chak   (2003-03-05 11:38) [2]

===> Digitman © (05.03.03 11:17)
Спасибо за науку!!!

есть еще вопрос:
правильно ли я пишу следующую процедуру?

procedure TSocketFileThread.ClientExecute;
begin
while (not Terminated) and ClientSocket.Connected do
begin
SocketRead; //процедура в которой я обрабатываю то что приходит (здесь я не использую Synchronize а только внутри самой процедуры SocketRead в случае необходимости - мне обязательно нужно чтоб в основном потоке виводилась информация про работу этого потока!!)
end;
end;



а твои слова ... здесь ты просто работаешь с методами приема/передачи объекта, ссылка на который передана тебе в конструкторе (св-во ClientSocket)
здесь это в процедуре TSocketFileThread.ClientExecute
или я могу и в своей процедуре SocketRead все обрабатывать?


 
Digitman   (2003-03-05 11:49) [3]


> правильно ли я пишу следующую процедуру?


это зависит от того, что делается в SocketRead;

кр.всего прочего нельзя "выпускать" потенциально возникающие в в методе ClientExecute, но необработанные ("непогашенные") исключения.

иными словами, тело метода нужно заключать в блок перехвата исключений:

try
...
except
.. здесь, при необходимости. можно регистрировать исключения, ведя некий их лог
end;


> здесь это в процедуре TSocketFileThread.ClientExecute
> или я могу и в своей процедуре SocketRead все обрабатывать?


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


 
Chak   (2003-03-05 18:05) [4]

Спасибо Digitman вроде все получается, но есть еще вопрос:

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

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

В проге которую делаю нужно чтоб клиент подсоединился к серверу и передал(получил) файлы, а на основной форме идет обновление листбокса и гауге!! с листбоксом все в порядке он обновляется во время работи с клиентом а вот с обновлением гауге ну никак!!! сплошные тормоза!!!

В одном потоке все работет, за исключением тормозов с обновлением гауге!!

Хочу всю работу с присоединенным клиентом вывести в отдельный поток с надеждой на то что это мне поможет!!!



 
Digitman   (2003-03-06 08:16) [5]

TMyThread = class(TThread)
..
FProgressPos : Integer;
..
end;

procedure TMyThread.DoProgress;
begin
MyForm.ProgressBar.Position := FProgressPos;
end;

procedure TMyThread.[Client]Execute;
begin
..
FProgressPos := FProgressPos + ...;
Synchronize(DoProgress);
..
end;



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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
3-91158
Rustik
2003-04-09 13:42
2003.04.28
Мастера подскажите пжлста Как реализовать вставку записей в базу


6-91443
RUS1
2003-03-04 09:22
2003.04.28
толи Server.Socket глючит толи у меня лыжы не едут


1-91399
Andrey_n
2003-04-16 15:18
2003.04.28
округление


3-91147
Elvira
2003-04-08 08:58
2003.04.28
Blob-поля


1-91389
Вопрос
2003-04-16 13:11
2003.04.28
Окно Windows





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский