线程学习
1: Indy的线程TIdThread中的执行函数Run会反复执行,因为其OnExecute中是这样写的
部分代码
try BeforeRun; try while not Stopped do begin //这里循环 Run; end; finally AfterRun; end;//tryf finally Cleanup; end;
所以 TIdTCPServer 的 OnExecute事件也是会被反复执行的.
2: TIdTCPServer 的 OnExecute事件是在非主线程中执行的(其实就是TIdPeerThread中执行的).
3: AThread.Connection.ReadBuffer 等读取函数是阻塞的,即线程会停在那一行.可将断点放在该行测试.
4: TIDThread类中若发现错误, 线程会退出,看其中代码:
procedure TIdThread.Execute; begin try try ......//略去很多代码 except //捕捉到错误 on E: Exception do begin FTerminatingExceptionClass := E.ClassType; FTerminatingException := E.Message; DoException(E); Terminate; //看这里,线程退出了. end; end;//trye end;