Der Unterschied liegt vorallem an UpdateMemo, das über Synchronize aufgerufen wird.
In dieser Funktion sollten keine blockierenden Aufrufe (wie z.B. TIdTCPClient.Readln, Sleep) stehen, da der Code nicht im Thread ausgeführt wird zu dem er gehört, sondern im Hauptthread deiner Anwendung, was natürlich deine Anwendung dann einfriert.
Vielelicht hilft dir das ein wenig:
Code:
läuft im läuft im
Hauptthread MyThread
|
|
|---->TMyThread.Create---->|
| |
| |
| |
| |
| |<---Synchronize<--------|
| |
| |
| | Ende von Sync. ------->|
| |
| |
| |
| |
V V
Schau dir mal dieses Tutorial an:
http://www.tutorials.delphi-source.de/threads/