Hol*_*rwa 0 delphi delphi-2009 indy10
一个单独的线程创建一个TidTCPClient和一个TTimer.TTimer设置为3s,如果TCPClient未连接,则调用TCPClient.Connect.
如果没有要连接的服务器,则会导致尝试每3秒连接一次.
主线程(UI)什么都不做,但是如果我用鼠标抓住窗口并在屏幕上缓慢移动它,它会每隔3秒钟被卡住约2秒钟,然后它会跳转到鼠标光标位置并跟随鼠标再次,直到下一次尝试连接发生.
换句话说,当TCPClient尝试连接时,主线程似乎被阻止.
为什么会发生这种情况,即使TCPClient在它的单独线程中?
您的TTimer通过接收WM_TIMER消息来工作; 在VCL线程中使用VCL的主消息泵调度这些消息.在3秒到期后,您的TTimer.OnTimer事件在主线程中运行,因此调用Connect将在主VCL线程中运行.
你被封锁了,因为你没有穿线!