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] Impedire eventi su ciclo for

    Lo so il titolo non è autoesplicativo, ma non saprei come riassumere meglio

    In pratica il software che ho sviluppato utilizza delle connessioni tcp con un server. Alcune volte capita che il server invii dei trigger verso uno o più client connessi. Se il trigger è di aggiornamento, il client inizia un ciclo for per aggiornare dei campi in una listview. Il problema è che se l'utente fortunosamente compie un'azione durante il ciclo potrebbe far sballare il counting delle righe facendo uscire un errore di "list out of bounds".

    C'è possibilità di inibire le azioni prima del ciclo e riabilitarle successivamente?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da VaLvOnAuTa
    C'è possibilità di inibire le azioni prima del ciclo e riabilitarle successivamente?
    Banalmente, potresti usare un campo booleano (Boolean) da impostare a True quando inizia un'operazione che deve impedire ad altre di intervenire sulla situazione in cui si lavora, usando eventualmente un costrutto try...finally.
    codice:
    if LockFlag then
      Exit;
    LockFlag := True;
    try
      // ...ciclo sugli elementi
    finally
      LockFlag := False;
    end;
    In questo caso, se è in corso un ciclo sugli elementi, il tentativo di reiterare lo stesso metodo, o un metodo che si basa sullo stesso principio controllando il flag, viene impedito. Il costrutto try...finally garantisce che il flag venga resettato anche in caso di errore.

    Se è necessario ritardare la risposta all'evento piuttosto che impedirla, è necessario allora usare elementi di sincronizzazione come Mutex oppure Critical Section.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Grazie mille per l'idea.
    Pensavo ci fosse un metodo per "lockare" l'applicazione in maniera globale.

    P.S. Immagino che se metto la variabile booleana tra le public declarations del form, il valore di questa sarà modificabile anche dai form "figli".

    In ogni caso grazie mille

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.