probabilmente (qua mi gioco la reputazione :D) l'oggetto ARequestInfo viene distrutto dal thread principale al rientro da Tusessionthrd.Create
quindi il puntatore nel nuovo thread punta ad un oggetto che è stato distrutto
potresti provare:
1) in TFR_Principale.HTTPServerCommandGet, clona ARequestInfo (ad esempio in ThreadSafeARequestInfo)
2) crea il thread con: SesThrd:=Tusessionthrd.Create(False,ThreadSafeARequestInfo,AResponseInfo,AContext);
3) assicurati che il thread distrugga ThreadSafeARequestInfo quando ha terminato il lavoro
speriamo bene :)
facci sapere
constructor Tusessionthrd.Create(CreateSuspended: Boolean;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo;
Acontext: TIdContext);
begin NEL COSTRUTTORE PASSO LA CLASSE "AREQUESTINFO" CHE ARRIVA DALLA FORM PRINCIPALE ALLA CLASSE PRIVATA "THRDAREQUESTINFO" DEL THREAD
inherited Create(CreateSuspended);
ThrdARequestInfo:=TIdHTTPRequestInfo.Create;
ThrdARequestInfo:=ARequestInfo; NON E' QUI CHE VIENE ALLOCATA IN UNA NUOVA PARTE DI MEMORIA LA NUOVA CLASSE ?????O MEGLIO...LA CLASSE COPIATA
Prova così
constructor Tusessionthrd.Create(CreateSuspended: Boolean;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo;
Acontext: TIdContext);
begin // NEL COSTRUTTORE PASSO LA CLASSE "AREQUESTINFO" CHE ARRIVA DALLA FORM PRINCIPALE
inherited Create(CreateSuspended);
ThrdARequestInfo:=TIdHTTPRequestInfo.Create; // crea nuova istanza e valorizza puntatore
ThrdARequestInfo.Assign(ARequestInfo); // copia i valori nell'istanza ThrdARequestInfo leggendo da istanza ARequestInfo
...
quando mandi in esecuzione vedi se ARequestInfo è valorizzato e se si valorizza ThrdRequestInfo