R
rzxiaojun
Unregistered / Unconfirmed
GUEST, unregistred user!
我在form1上放置一个Indy TIdTcpserver作为服务器,在TIdTcpserver的onExecute方法中需要对VCL控件进行读写,比如我想在 form1.memo1上显示收到的报文;
procedure Tform1.dispmessage;
begin
form1.memo1.lines.add(....);
end;
这样我在 TidTcpserver的onExecute接收报文,通过onExecute方法的参数aThread调用aThread.Synchronize(form1.dispmessage),而Synchronize的参数是一个不能带参数的过程,那么请问我要怎么才能够把TidTcpserver在onExecute过程里面接收到的报文传递给dispmessage??
有些人也许想到在 Tform1里面定义一个private变量msg:string,然后在onExecute里面把受到的报文复制给msg;然后定义dispmessage如下:
procedure Tform1.dispmessage;
begin
form1.memo1.lines.add(msg);
end;
在onExectute里面调用aThread.Synchronize(form1.dispmessage);这种方法当然可行,可是有点怀疑的地方:假设TIdTcpserver同时受到两个客户端发送过来的报文,就会在各自的线程里面同时访问msg变量。请问这个msg变量会不会相互覆盖??会不会出现线程2改变了线程1的值?这样显示的结果肯定就错了。
--------------------------------------------------------------------------------
procedure Tform1.dispmessage;
begin
form1.memo1.lines.add(....);
end;
这样我在 TidTcpserver的onExecute接收报文,通过onExecute方法的参数aThread调用aThread.Synchronize(form1.dispmessage),而Synchronize的参数是一个不能带参数的过程,那么请问我要怎么才能够把TidTcpserver在onExecute过程里面接收到的报文传递给dispmessage??
有些人也许想到在 Tform1里面定义一个private变量msg:string,然后在onExecute里面把受到的报文复制给msg;然后定义dispmessage如下:
procedure Tform1.dispmessage;
begin
form1.memo1.lines.add(msg);
end;
在onExectute里面调用aThread.Synchronize(form1.dispmessage);这种方法当然可行,可是有点怀疑的地方:假设TIdTcpserver同时受到两个客户端发送过来的报文,就会在各自的线程里面同时访问msg变量。请问这个msg变量会不会相互覆盖??会不会出现线程2改变了线程1的值?这样显示的结果肯定就错了。
--------------------------------------------------------------------------------