Q&A

  • indy 에서 sendbufferfh 받을때요..
안녕하세요

델파이 시작한지 얼마 안되는 초보 입니다.

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를 받지를 못합니다.

프로그래밍에 별 지식이 없어서 흑흑

스래드 생성 순서도 문제가 있는것 같고

페킷 받는 순서도 문제가 있는것 같은데 도져히 모르겠습니다.

님들 꼭좀 도와 주세요

그리고 혹시 인디로 만든 메신져 소스 있는 분 부탁 드립니다

그럼 즐프요~!

아참 스레드라는 개념이 무한 으로 루프를 돈다는 개념 아닙니까?

그래서 기다리고 있다가 소켓에 뭔가 도착하면 일을 하고

파괴 하기 전까지요... 그것도 궁금 하군요

그럼 답변 목놓아 기다리겠습니다.~!
1  COMMENTS
  • Profile
    최용일 2003.08.26 20:16
    안녕하세요. 최용일입니다.

    쓰레드 자체가 무한루프를 돌게 해주는 것은 아닙니다.

    때문에 님이 만드신 쓰레드는 FormCreate이벤트에서 생성되고 바로 종료가

    되어 버리겠네요... 델파이 예제에 보시면 쓰레드예제가 있던데 참고해보세요.

    아참~ 인디에 있는 쓰레드클래스는(TIdThread)는 자체적으로 자동으로 루프를

    돌수 있도록 만들어져 있습니다. 델파이 쓰레드(TThread)보다는 좀더 강력한

    기능들을 지원하구요. 인디쓰레드를 이용해보시는것두 좋겠네요...

    ^^ 항상 즐코하세요...