안녕하세요
델파이 시작한지 얼마 안되는 초보 입니다.
indy 컴포넌트를 이용해 연결하는데요
간단한 데이터을 보내는데 스레드를 만들어 사용합니다.
function SendThread.SendBuffer(ibuffer: Tbuffer): String;
var
List : TList;
Count : Integer;
begin
if Form1.IdTCPServer1.Active then
begin
List := Form1.IdTCPServer1.Threads.LockList;
for Count := 0 to List.Count -1 do
begin
TIdPeerThread( List.Items[Count]).Connection.WriteBuffer( ibuffer, sizeof( ibuffer ) , true );
end;
Form1.IdTCPServer1.Threads.UnlockList;
end;
end;
{ ReceiveThread }
procedure ReceiveThread.Execute;
var
iRebuffer : Tbuffer;
begin
inherited;
with Form1 do
begin
if IdTCPClient1.Connected then
begin
Label1.Caption := 'connected';
IdTCPClient1.ReadBuffer( iRebuffer, sizeof( iRebuffer ) );
case ( iRebuffer.flag ) of
1:
begin
ListBox1.Items.Add( iRebuffer.meno );
IdTCPClient1.ReadBuffer( iRebuffer, sizeof( iRebuffer ) );
ListBox1.Items.Add( inttostr( iRebuffer.flag ) );
end;
2:
begin
ListBox2.Items.Add( iRebuffer.meno );
end;
end;
end;
end;
end;
이렇게 만들어서
스레드 생성 시기는 폼이 만들어질때 만들었구요
procedure TForm1.FormCreate(Sender: TObject);
begin
SendTh := SendThread.Create( true );
SendTh.Resume;
ReceTh := ReceiveThread.Create( true );
ReceTh.Resume;
end;
이렇게요
그런데 SendThread.sendBuffer를 받지를 못합니다.
프로그래밍에 별 지식이 없어서 흑흑
스래드 생성 순서도 문제가 있는것 같고
페킷 받는 순서도 문제가 있는것 같은데 도져히 모르겠습니다.
님들 꼭좀 도와 주세요
그리고 혹시 인디로 만든 메신져 소스 있는 분 부탁 드립니다
그럼 즐프요~!
아참 스레드라는 개념이 무한 으로 루프를 돈다는 개념 아닙니까?
그래서 기다리고 있다가 소켓에 뭔가 도착하면 일을 하고
파괴 하기 전까지요... 그것도 궁금 하군요
그럼 답변 목놓아 기다리겠습니다.~!
쓰레드 자체가 무한루프를 돌게 해주는 것은 아닙니다.
때문에 님이 만드신 쓰레드는 FormCreate이벤트에서 생성되고 바로 종료가
되어 버리겠네요... 델파이 예제에 보시면 쓰레드예제가 있던데 참고해보세요.
아참~ 인디에 있는 쓰레드클래스는(TIdThread)는 자체적으로 자동으로 루프를
돌수 있도록 만들어져 있습니다. 델파이 쓰레드(TThread)보다는 좀더 강력한
기능들을 지원하구요. 인디쓰레드를 이용해보시는것두 좋겠네요...
^^ 항상 즐코하세요...