일반폼에서 쓰레드를 이용하여 소켓으로 데이터를 받는건 아주 잘됩니다.
하지만 이쏘스 그대로를 엑티브 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.
아마 delmadang에 어딘가 있을 겁니다.
답변도 제가 했는데요. synchronize가 linux도 수용하기 위해서 바뀌었는데
이게 문제다 라는 결론입니다.
synchronize 대신 SendMessage를 사용해서 동기화 시키는 방법을 한번 구상해 보시길 바랍니다.
이게 같은 소스에서 델5는 되고 델 6,7은 안된다고 하시더군요.