Non pas du tout.On ne fait donc que reporter la gestion de la section critique dans le thread principal puisque Synchronize l'implémente déjà ! Et à l'arrivée, le thread secondaire sera bloqué la même chose puisque la gestion de l'affichage sera plus lente que notre boucle !
Synchronize collecte les demandes d'exécution pour le thread principal, et les places dans une liste. La section critique que gère Synchronize sert à protéger la liste contre les accès concurrents.
Synchronize positionnne un événement pour signaler au thread principal qu'il a des requêtes à traiter. Une fois l'événement signalé, Synchronize suspend le thread secondaire jusqu'à ce que sa demande ait été traitée. Le thread secondaire est ainsi complètement stoppé jusqu'à ce que le thread principal ait finit de tout redessiner.
Dans la solution que je décris, le thread secondaire modifie des variables d'états et poste des messages au thread principal pour lui dire qu'il peut se mettre à jour.
Le thread principal va lire ces variables.
La section critique n'intervient que pour l'accès à ces variables, donc sur un temps très court. Le thread principal peut parfaitement se redessiner pendant que le thread secondaire continue son traitement.
Le seul moment où il peut y avoir blocage, c'est si le thread principal veut lire les variables d'état exactement au même moment que le thread secondaire veut les modifier.
Dans tous les autres cas, la section critique permettra de continuer l'exécution sans aucun blocage ni rallentissement. Ni d'un côté, ni de l'autre.
Partager