Bonjour,
Soit un exécutable "Delphi" qui lance x threads.
Chaque thread exécute n fois en boucle une fonction d'une DLL "Delphi".
La fonction en question prend une chaîne vide et concatène en boucle (500 fois) un caractère en fin de chaîne.
En cas d'exception dans la fonction DLL ou dans l'appel du thread (méthode Execute) un fichier texte est alimenté avec le message d'erreur.
Voilà ce que j'obtiens dans ce fameux fichier et ce de façon "aléatoire":
Pour obtenir ce résultat j'ai lancé 5 threads avec 10000 boucles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 30/06/2005 10:35:25 > MaFonction: Out of memory 30/06/2005 10:35:25 > MaFonction: Access violation at address 00A22321 in module 'madll.dll'. Read of address 0146BE80 30/06/2005 10:35:25 > TMonThread.Execute: Invalid pointer operation 30/06/2005 10:35:26 > MaFonction: Access violation at address 00A21A6D in module 'madll.dll'. Write of address 00000001
Bon j'ai lancé plusieurs fois mon programme avant d'obtenir ça mais grosso-modo c'est soit "Access violation" soit "Invalid pointer operation".
Constatation 1: plus on augmente le nombre de threads ou le nombre de boucles plus on a de chance de tomber sur ce type d'erreur.
Constatation 2: l'erreur est critique pour l'ensemble du processus (exécutable + DLL).
Pour ceux qui sont costauds dans tout ce qui touche de près ou de loin aux threads et aux DLL et qui veulent bien m'aider à comprendre (s'il y a bien une explication) vous pouvez télécharger mon projet ici:
http://www.eaistorage.com/share/download/threadsdll.zip
Si vous avez la moindre idée ou la moindre piste n'hésitez pas j'aimerai bien élucider ce qui reste pour moi encore un mystère après 5 jours de tests acharnés. Il faut préciser que j'ai vu apparaître le problème dans une architecture bien plus complexe et que j'ai remis en cause pas mal de choses jusqu'à me rendre compte qu'au final avec un projet tout simple j'ai déjà ce phénomène.
D'avance merci pour vos réponses
Mathieu
PS: WinXP SP2 + Delphi 7.0 (4.453)
Partager