Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    [Delphi] Indy: Freeze su ReadLn

    Sì lo so... ho rotto io e gli indy

    Credo il titolo sia alquanto autoesplicativo (almeno per chi si è ritrovato a sviluppare un'applicazione con IdTcpClient ).
    Meglio spiegare in ogni caso:
    Il componente IdTcpClient non gestisce gli eventi sulla lettura del socket (alcuni componenti riescono ad intercettare l'evento "onread", gli indy no), il che vuol dire che, se il server deve inviare dei trigger al client, il client non può leggerli se non sta a controllare ogni tanto il socket.
    A questo proposito interviene un timer (io ho creato un thread apposito invece di usare il timer) che ogni tot millisecondi legge il socket.
    Il problema è che il metodo "ReadLn" dell'IdTcpClient dovrebbe andare in timeout dopo un certo tot di millisecondi settabili dal programmatore (io ho settato 5 millisecondi mentre il thread si autoaggiorna ogni 500), però in timeout il readln non ci va. Resta in attesa finchè non riceve qualcosa da leggere.

    Il che comporta il seguente problema:
    come posso far sì che il client riceva i trigger dal server senza compromettere il funzionamento del client stesso?
    Ho provato ad usare il componente "AntiFreeze" ma non mi convince, dato che quando disconnetto il client, l'applicazione si "freeza" lo stesso.

  2. #2
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Trovata anche questa spiegazione:
    la versione di indy installata di default su delphi 7 è buggata.
    Usando i componenti del delphi 6 non c'è alcun problema.

    Risolto un altro caso risolto, agente VaLvOnAuTa.

    P.S. Scusate per la copiosità di domande stupide

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Io suggerirei anche di usare un thread esterno per le operazioni da eseguire attraverso qualsiasi componente client di Indy; in questo modo, l'elusione del blocco dell'applicazione è garantito.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.