在线程里面IdTCPClient1读取信息也死界面?

youyidianmimang 2016-06-27 04:34:02
procedure TMy2Thread.execute;
var
instr :string;
begin sleep(10000);
if Assigned(tcpremote) then
begin
while tcpremote.IdTCPClient1.Connected do
begin
instr:=tcpremote.IdTCPClient1.ReadLn('');//线程里面执行这个也会导致主界面卡死?
//messagetext(instr);
end;
end
end;

为什么线程里面执行sleep都不会卡住主界面;而调用 scoket 读取返回信息就死掉了?
...全文
430 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
youyidianmimang 2016-07-05
  • 打赏
  • 举报
回复
Synchronize ....唉
mdejtod 2016-07-01
  • 打赏
  • 举报
回复

  while (not Terminated)    do
  begin
    with frmMain do
    begin
      if not Client.Connected then
      begin
        tmrTCPConnect.Enabled := True;
        Terminate;
      end
      else
      begin
        try
          Client.ReadBuffer(FBufData,SizeOf(FBufData));
        except
          
        end;
      end;
    end; 
  end;
  sleep(50);
end;
  • 打赏
  • 举报
回复
tcpremote 是界面上的控件吧 为什么不在线程里创建一个呢?
lyhoo163 2016-06-28
  • 打赏
  • 举报
回复
线程中执行sleep,仅线程暂停。此时,它几乎不占用CPU。 线程中执行其它代码,该代码涉及VCL操作或网络硬件的操作时,当信息读取困难时,不仅自己线程停止,甚至造成主线程停止,出现屏幕停钝。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧