Page 2 sur 2
Re: Utiliser un thread pour transmettre un fichier via FTP
Publié : lun. 24/juil./2023 10:43
par Marc56
Ne pas oublier que c'est l'OS qui va gérer les threads.
Mmmm...
PureBasic - Thread
«
Un thread s'exécute à l'intérieur du programme, il ne s'agit pas d'un autre processus. Lorsque le programme se termine, tous les threads sont détruits. Sous PureBasic, les threads sont des procédures appelées de manière asynchrone. Un thread tourne jusqu'à ce que la procédure se termine. »
@boddhi
«
Note: Les threads doivent être utilisés avec précaution, car il est possible que des ressources partagées (mémoire, fichiers, variables etc..) soient accédées au même moment ce qui causera des résultats aléatoires. Les commandes relatives aux 'Mutex' peut être utilisées pour synchroniser ces ressources partagées. »
Découper un programme en un tas de threads ne le fera pas tourner globalement plus vite. Ça permet simplement de libérer l'interface principale. Pour arrêter un thread, on utilisera plutôt PostEvent (en envoyant un flag de fin pour quitter la procédure) que KillThread. Un thread qui en appelle un autre etc va vite devenir ingérable...

Re: Utiliser un thread pour transmettre un fichier via FTP
Publié : lun. 24/juil./2023 11:10
par boddhi
Suite...
En gros, voici l'organigramme de mon code...

Re: Utiliser un thread pour transmettre un fichier via FTP
Publié : lun. 24/juil./2023 11:35
par boddhi
Salut Marc,
Marc56 a écrit : lun. 24/juil./2023 10:43
Découper un programme en un tas de threads ne le fera pas tourner globalement plus vite. Ça permet simplement de libérer l'interface principale. Pour arrêter un thread, on utilisera plutôt PostEvent (en envoyant un flag de fin pour quitter la procédure) que KillThread. Un thread qui en appelle un autre etc va vite devenir ingérable...
Effectivement, j'ai créé plusieurs procédures threadées (chacune ayant un objectif différent et s'exécutant les unes après les autres) pour permettre à l'utilisateur de mettre en pause ou en arrêter chacune d'elles en cours d'exécution.
A cette fin, j'utilise une variable structurée avec des flags Pause et Arrêt pour déterminer, dans les boucles de ces procédures, si l'utilisateur a cliqué sur l'un des boutons dédiés.
Le problème que je rencontre c'est lorsqu'après deux ou trois procédures déjà threadées, quand je provoque un arrêt définitif (flag Arret à 1) à l'intérieur d'une nouvelle, je me retrouve avec des erreurs mémoire. J'ai beau tout essayer, je ne trouve pas l'origine de ce qui provoque ces erreurs fatales. Je finis par me dire que je m'y prends très vraisemblablement mal.
Je me suis basé sur les codes et informations déjà communiqués par Cage et Ollivier en les adaptant à mes propres besoins, mais ça plante...
Il y a quelque chose qui m'échappe encore dans la gestion correcte des threads...

Re: Utiliser un thread pour transmettre un fichier via FTP
Publié : lun. 24/juil./2023 14:48
par microdevweb
Désolé Mark,
Peut-être me sui je mal exprimé. Mais dans mon cours de temps réel. Le multi threading était un élément important, car c'est l'os qui décide quand le thread sera exécuté.
D'où la difficulté d'exécuter plusieurs threads qui partagent les mêmes ressources en même temps.
Maintenant, il est vrai qu'il ne faut pas en abuser.
@boddhy, je regarderais quand j'aurais un moment.