大大,为何小弟我把TCPClient放在线程里使用,然后在free线程时会卡住
请教各位大大,为何我把TCPClient放在线程里使用,然后在free线程时会卡住?
delphi7,用TcpClient做的一个练习,在断开连接时想释放线程,但执行到ClientReceiveThread2.Free;这句时就卡住了,代码不往下执行了,这是为什么?
直接free是没有问题的,但我想知道为何先Suspend再free就会卡住?换用TIDTCPClient也是同样的效果
if TcpClient2.Connected then
begin
TcpClient2.Disconnect;
ClientReceiveThread2.Suspend;
ClientReceiveThread2.Free;
end;
这是线程的execute
procedure TClientReceiveThread2.Execute;
var
strRecv : String;
begin
with Form1 do
begin
while TcpClient2.Connected do
if TcpClient2.WaitForData(0) = true then
begin
strRecv := TcpClient2.Receiveln(#13);
if checkFreeze.Checked = false then
memo4602.Lines.Add(strRecv);
end;
sleep(100);
end;
end;
------解决方案--------------------
ClientReceiveThread2.Suspend;
是线程挂起啊兄弟
------解决方案--------------------
memo4602.Lines.Add(strRecv);
在线程不能直接访问VCL控件,否则会造成问题。
delphi7,用TcpClient做的一个练习,在断开连接时想释放线程,但执行到ClientReceiveThread2.Free;这句时就卡住了,代码不往下执行了,这是为什么?
直接free是没有问题的,但我想知道为何先Suspend再free就会卡住?换用TIDTCPClient也是同样的效果
if TcpClient2.Connected then
begin
TcpClient2.Disconnect;
ClientReceiveThread2.Suspend;
ClientReceiveThread2.Free;
end;
这是线程的execute
procedure TClientReceiveThread2.Execute;
var
strRecv : String;
begin
with Form1 do
begin
while TcpClient2.Connected do
if TcpClient2.WaitForData(0) = true then
begin
strRecv := TcpClient2.Receiveln(#13);
if checkFreeze.Checked = false then
memo4602.Lines.Add(strRecv);
end;
sleep(100);
end;
end;
------解决方案--------------------
ClientReceiveThread2.Suspend;
是线程挂起啊兄弟
------解决方案--------------------
memo4602.Lines.Add(strRecv);
在线程不能直接访问VCL控件,否则会造成问题。