Hermios
Messages postés264Date d'inscriptiondimanche 14 avril 2013StatutMembreDernière intervention23 mai 2014
-
2 juil. 2013 à 22:25
Hermios
Messages postés264Date d'inscriptiondimanche 14 avril 2013StatutMembreDernière intervention23 mai 2014
-
4 juil. 2013 à 11:18
Salut à tous,
Bon, mon problème n'est pas simple à expliquer, d'autant que je ne sais pas vraiment quoi afficher comme code (Cela dit, si je savais, j'aurai déjà trouvé la solution 8:) )
Alors
Dans mon main,
1- Je charge les données d'un fichier xml
2- j'appelle une fonction fct1, qui est dans Program.cs, une fois, si le fichier est vide(Dans le même thread), sinon, autant de fois qu'il y a d'objets dans mon fichier xml(Dans des threads différents)
3- Je lance un "Application.Run()"
4- Cette fonction fct1 appelle un singleton, qui lui même appelle un form et un notifyicon.
Dans certains cas, le programme semble tomber dans une boucle infinie de création de form et de notifyicon (Il m'en génère une bonne centaine avant de crasher!)
C'est systématique si mon programme se lance au démarrage.
Sinon, c'est plus ou moins aléatoire (Même si j'ai l'impression que ca arrive plus facilement quand la ram de l'ordi est prise.)
Un seul démon est lancé, que je supprime dans le taskmanager pour éviter le crash.
Mon fichier xml contient au maximum une 20aine d'objets, donc chaque instance de form et notifyicon créé ne correspond en aucun cas à chaque objet.
Je suis sous Win7 64bits.
Je programme sous Net 4.0, avec Visual Studio 2010 Express
Voilà, bien sur si vous avez besoin d'autres infos, voir d'une partie du code, y a pas de soucis.
Merci beaucoup de votre aide.
Hermios
Messages postés264Date d'inscriptiondimanche 14 avril 2013StatutMembreDernière intervention23 mai 20142 4 juil. 2013 à 11:18
Salut,
Donc la solution était: Appel récursif de mon singleton... dans le constructeur lui même!
Comme la variable instance n'était alors pas encore créé, puisque le constructeur n'avait pas fini toutes ces lignes, cela créeait un nouvel objet!
Quant à trouver l'appel récursif, il était en fait du à une autre classe, qui affichait des données dans le form, lequel réagissait par erreur en demandant à la même classe de sauvegarder ces données, et d'afficher une info... dans le form (donc en rappelant le singleton pour avoir accès au form).
Bon, pour une fois, c'était pas la faute bête par excellence! :D
Quoiqu'il en soit, merci à vous deux pour vos réponses.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 3 juil. 2013 à 10:28
Il faut remonter la trace d’exécution de ton code
le programme semble tomber dans une boucle infinie de création de form et de notifyicon
Il te faut commencer par recenser tous les codes qui ouvrent explicitement cette form (les form.show de cette form par exemple). Il te faut ensuite savoir ou, pourquoi, et comment son exécutés/appelés ces codes et remonter ainsi toutes les chaines possibles des appels.
Tu vas avoir au final, certainement, plusieurs causes possibles à analyser.
Une piste : Tu dis qu'un singleton ouvre la form et le notifyicon. Comment ce singleton le fait-il ? Ce singleton est-il utilisé ailleurs (sur la form?) de sorte qu'il puisse à nouveau ouvrir la form et le notifyicon ? etc..etc..
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Hermios
Messages postés264Date d'inscriptiondimanche 14 avril 2013StatutMembreDernière intervention23 mai 20142 3 juil. 2013 à 11:23
Salut Casy,
Merci beaucoup pour ta réponse.
Donc comme prévu, j'ai oublié des informations importantes :)
Le notifyicon et le form ne sont construits que dans le constructeur du singleton.
Le singleton est "appelé" à beaucoup d'endroits, mais comme il s'agit d'un singleton, normalement (enfin, si j'ai bien compris), le constructeur lui ne devrait être appelé qu'une seule fois.
En fait, j'ai l'impression que le programme ne "voit pas" que la commande a été lancée, et ne voit pas que l'instance de mon singleton n'est pas nulle.
Ne connaissant pas tous les mécanismes des variables statiques, je me dis que c'est peut être possible. Mais comment? Et surtout, comment le réparer?
Merci
Hermios
Messages postés264Date d'inscriptiondimanche 14 avril 2013StatutMembreDernière intervention23 mai 20142 3 juil. 2013 à 17:27
Malheureusement, comme j'ai dit, ca se reproduit essentiellement quand je lance l'appli (installée via un setup) au démarrage de Windows. En fait, là où il lance toutes les applis, donc je pense au moment où le proc est le plus chargé. Une solution pour tester : Simuler un proc chargé (en supposant que ce soit la raison pour laquelle ca fait ca). Une idée pour faire ca?
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 3 juil. 2013 à 20:07
Bonsoir, je n'ai pas la solution pour simuler un proc chargé, mais si tu veux voir combien de fois le constructeur de Singleton est appelé, tu peux y mettre une ligne qui écrit l'heure dans un fichier texte.
Il te suffira de le consulter après un crash.