OnCloseQuery 이벤트가 왔다면, ClientSocket의 OnConnect중간에 Forms.Application.ProcessMessages;를 사용하셨다는거겠죠.
Forms.Application.ProcessMessages;를 잘 사용하면 정지 시킬 수 있습니다.
<!--CodeS-->
//ClientSocket의 OnConnect 예입니다
procedure TForm1.CS1Connect(Sender: TObject; Socket: TCustomWinSocket);
var
startx : string;
begin
while true do begin //-무한으로 돌고 있다고 가정합니다
Forms.Application.ProcessMessages; //1.일단 Messages가 가능하도록 합니다
if CS1.Active then begin //2. ClientSocket이 활성화인지 체크합니다
Readln(fh, startx); //-파일 냐용을 계속 읽어 보낸다고 가정합니다
if startx <> '' then begin
CS1.Socket.SendText(startx);
end
else Reset(fh); //-파일을 또 첫줄부터 돌립니다
end
else exit; //3. ClientSocket이 활성화가 아니면 나갑니다
end;
end;
//폼 닫기나 버튼이나 등등의 이벤트에서 ClientSocket를 닫습니다.
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CS1.Active := False;
end;
앗! 첨부 파일이 있었네요
Application.ProcessMessages 이후에 아무처리도 없네요....
전역변수등으로 계속 실행할지 중단해야 할지를 구분 해주는 것이 필요합니다.
일단, ClientSocket.Active만 체크해 보았습니다.
procedure TForm1.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
var
S : Integer;
begin
Memo1.Lines.Add('Client Msg : [ Server Conn ]');
for S := 0 to 100 do begin
Application.ProcessMessages;
if ClientSocket.Active then begin //추가
Socket.SendText('Send Msg : ['+IntToStr(S)+']');
Sleep(100);
end
else exit; //추가
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClientSocket.Active := False;
end;
Forms.Application.ProcessMessages;를 잘 사용하면 정지 시킬 수 있습니다.
<!--CodeS-->
//ClientSocket의 OnConnect 예입니다
procedure TForm1.CS1Connect(Sender: TObject; Socket: TCustomWinSocket);
var
startx : string;
begin
while true do begin //-무한으로 돌고 있다고 가정합니다
Forms.Application.ProcessMessages; //1.일단 Messages가 가능하도록 합니다
if CS1.Active then begin //2. ClientSocket이 활성화인지 체크합니다
Readln(fh, startx); //-파일 냐용을 계속 읽어 보낸다고 가정합니다
if startx <> '' then begin
CS1.Socket.SendText(startx);
end
else Reset(fh); //-파일을 또 첫줄부터 돌립니다
end
else exit; //3. ClientSocket이 활성화가 아니면 나갑니다
end;
end;
//폼 닫기나 버튼이나 등등의 이벤트에서 ClientSocket를 닫습니다.
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CS1.Active := False;
end;
<!--CodeE-->