Perdonami se dico sciocchezze, è da un po' che non programmo multithread...
Mi lascia un po' perplesso questo codice:
app:=TTCPCryptoDaemon.create;
app.Execute;
app.FreeOnTerminate:=true;
app.Terminate;
app:=nil;
// stop program loop
Terminate;
Lo lanci e immediatamente dopo chiudi tutto? Come fa a funzionarti?
Forse qualche volta funziona perchè fa in tempo a creare il thread terziario di comunicazione?