Q&A

  • 엑티브엑스에서는 Thread 사용할수 없나요 ?!?!?
일반폼에서 쓰레드를 이용하여 소켓으로 데이터를 받는건 아주 잘됩니다.

하지만 이쏘스 그대로를 엑티브 x에 옮겨 놓고 해봐도 그렇고 ㅜㅜ 다시 작성

해도 역시 데이터를 받지 못하네요 ㅜㅜㅋ

혹시 엑티브 엑스에서는 쓰레드 사용못하나요 ??

-------------------------------- 소스 --------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets;
type
  TMyThread = class(TThread)
  private
        Msg: String;
        procedure View;
  public
        procedure Execute; override;
  end;

type
  TForm1 = class(TForm)
    TcpClient1: TTcpClient;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
      var DataLen: Integer);
    procedure TcpClient1Connect(Sender: TObject);
  private
    { Private declarations }
    MyThread: TMyThread;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyThread.View;
begin
        form1.Memo1.Lines.Add(Msg);
end;

procedure TMyThread.Execute;
begin
        while not Terminated do
        begin
                try
                        Msg := Form1.TCPClient1.Receiveln(Msg);
                        Synchronize(View);
                except
                        Terminate;
                end;
        end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
TCPClient1.RemotePort := '2002';
TCPClient1.RemoteHost := 'localhost';
TCPClient1.Connect;
MyThread := TMyThread.Create(true);
MyThread.FreeOnTerminate := true;
MyThread.Resume;
end;

procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
  var DataLen: Integer);
begin
//memo1.lines.Add(TCPClient1.Receiveln);
memo1.Lines.Add('데이터 받음');
end;

procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
memo1.Lines.add('서버에 접속되었읍니다.');
end;

end.
1  COMMENTS
  • Profile
    이광수 2004.07.01 19:18
    엑티브 폼 문제에서 쓰레드 문제를 누가 제기 하신적이 있더군요.
    아마 delmadang에 어딘가 있을 겁니다.

    답변도 제가 했는데요. synchronize가 linux도 수용하기 위해서 바뀌었는데
    이게 문제다 라는 결론입니다.

    synchronize 대신 SendMessage를 사용해서 동기화 시키는 방법을 한번 구상해 보시길 바랍니다.

    이게 같은 소스에서 델5는 되고 델 6,7은 안된다고 하시더군요.