Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Помогите, люди добрые, разобраться с TServerClient


Автор: X-Serge 6.10.2002, 21:20
Вопрос такой:
Есть объект
type
TFileServerThread = Class(TServerClientThread)
public
a : integer;
Procedure ClientExecute; override;
End;
.....
Procedure TFileServerThread.ClientExecute;
Begin
ClientSocket.Close;
End;
У него есть переменная a : integer;

Если в обработчике OnGetThread писать так

Procedure TForm1.ServerSocketGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
Var SocketThread: TServerClientThread);
Begin
// Create a new thread for connection
SocketThread := TFileServerThread.Create(False, ClientSocket);
End;

То не получается SocketThread.a:=1;

А если сделать так

Procedure TForm1.ServerSocketGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
Var SocketThread: TServerClientThread);
Var SThread: TFileServerThread;
Begin
// Create a new thread for connection
SThread := TFileServerThread.Create(False, ClientSocket);
SThread.a:=1;
End;

То вылетает ошибка :-(
Помогите чайнику решить этот вопрос!!!

Автор: Dayana 6.10.2002, 21:39
Если тебе нужно, чтобы а становилось равно 1, когда создается thread, то присвой a := 1 в методе TFileServerThread.Create.

Автор: Fantasist 7.10.2002, 04:50
Ecть несколько возможностей решения данного вопроса:
1. Самое простое:
Код

SThread := TFileServerThread.Create(True, ClientSocket);
SThread.a:=1;
SThread.Resume;

2. Переопределить конструктор и запихнуть в него дополнительный параметр:
Код

constructor TFileServerThread.Create(Susp:boolean, ClientSocket: TServerClientWinSocket; a_a:integer);
begin
a:=a_a;
inherited Create(Susp,ClientSocket);
end;

3. Вряд ли, это то, что ты хочешь, но можно и так:
Код

constructor TFileServerThread.Create(Susp:boolean, ClientSocket: TServerClientWinSocket);
begin
FreeOnTerminate:=false;
inherited Create(Susp,ClientSocket);
end;

.....
Procedure TForm1.ServerSocketGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
Var SocketThread: TServerClientThread);
Var SThread: TFileServerThread;
Begin
// Create a new thread for connection
 SThread := TFileServerThread.Create(False, ClientSocket);
 SThread.a:=1;
End;


В этом случае надо где-то самому сделать SThread.Free;

Автор: Alex 26.2.2005, 21:41
Перенесено из раздела Дельфи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)