L'ordinateur plante quand un programme tourne plus de 10 minutes

Résolu
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011 - 10 juil. 2011 à 16:39
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011 - 15 juil. 2011 à 15:25
bonjour,
je suis en train de concevoir un programme qui enregistre des nombre sur un site internet en continu (par reconnaissance graphique avec la fonction getpixel); il semble fonctionner, mais au bout de 5 à 15 minutes de fonctionnement, l'ordinateur plante totalement, et un ecran noir apparait. J'ai vérifié des centaines de fois, il ne semble pourtant pas y avoir de bug dans mon programme.
J'aimerais savoir à quoi cela est du, et comment je pourrais corriger ce problème svp
merci d'avance!

31 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 juil. 2011 à 14:49
Je corrige après relecture (assez pénible) de tes lignes de code :
mais ne vois pas du tout ce qui fait que, lors du "Again", ton Form1 serait différent de ce qu'il était précédemment

à coirriger par :
"mais ne vois pas du tout, y compris lotrs du "Again", ce qui fait que ton Form1 contiendrait et traiterait une "image/page" différente (de ton site) d'une image/page déjà traitée".

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011
11 juil. 2011 à 15:49
en fait, j'ai oublié d'expliquer plus en détail. déjà pour la version que j'utilise, je remplace le form1 par getdc(0), pour que le programme puisse travailler sur la page internet(celle ci est la version de construction quand je créai la reco graphique, j'utilisais la form1, plus simple), et cette partie de l'algo, ne fait que lire les nombres, je n'ai mis que cette partie parce que je pensais que si le prog buguait, ça serait à cause de ça; le again quant à lui sert non pas à trouver les nombre ou la page suivante, mais juste les chiffrs suivants du nombre.
Pour le changement de page, j'utilise for-next autour de cette partie de code, avec en indice le nombre de page à traiter(et un clic de souris, pour charger la page suivante).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 juil. 2011 à 17:04
je remplace le form1 par getdc(0)

J'espère que ton code utilise alors DeleteDC

Ta carte graphique souffrirait par ailleurs moins si, au lieu de charger la totalité de l'écran (GetDc(0), tu n'y chargeais que ce qui est nécessaire)

Ton processeur souffrirait moins ainsi également, mais encore moins si tu travaillais avec un DIB.

Mais ces remarques n'enlèvent rien à ce que j'ai dit en ce qui concerne la faiblesse matérielle de ta carte graphique, que je continue à montrer du doigt.

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011
11 juil. 2011 à 19:04
je pourrais avoir des précisions sur le deleteDC, le chargement partiel de l'ecran et sur le DIB? je n'y connais malheureusement absolument rien, je me suis lancé là dedans par necessité, la prog n'est pas vraiment mon fort...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 juil. 2011 à 19:18
Ce serait bien trop long à t'expliquer tout cela.
Mais si tu t'intéresses à ce genre de choses, je te suggères d'aller voir l'exemple DIB donné sur le site AllApi pour l'utilisation de la fonction CreateDibSection
Attarde-toi (mais pas uniquement) sur cette boucle ===>>

...
For Cnt = LBound(bBytes) To UBound(bBytes)
        If bBytes(Cnt) < 50 Then
            bBytes(Cnt) = 0
        Else
            bBytes(Cnt) = bBytes(Cnt) - 50
        End If
    Next Cnt
...

Pour mieux comprendre :
1) laisse-la telle quelle et regarde le résultat
2) mets-la complètement en commentaires et regarde le résultat

Tu y verras également l'utilisation de DeleteDC
Que te dire de plus ? ===>> ou tu analyses et comprends ===>> et tu sauras adapter, ou tu ne sais le faire et ... laisse tomber !
Mais j'insiste sur un point qui est pour moi très clair : tu as un problème matériel !


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 juil. 2011 à 19:27
Et commence par CETTE LECTURE qui t'éclairera probablement mieux.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011
12 juil. 2011 à 15:46
j'ai pu tester le programme sur un autre pc, et il fonctionne parfaitement, c'était donc bien un problème matériel.
Meri beaucoup ucfoutu de la peine que tu te donne pour m'aider moi et les autres forumer, c'est vraiment appréciable
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
12 juil. 2011 à 22:01
Bonjour,

Je viens de déplacer le topic dans la section VB6.
Ne recevant plus aucune notification mail, je tarde à participer après mon premier message sur ce sujet.

Penses à mettre "Réponse acceptée" sur le ou les message(s) qui t'ont aidés.

Mon site
0
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011
15 juil. 2011 à 12:30
en fait, j'ai toujours des problèmes avec ce programme, meme avec un autre pc. Je n'ai plus d'écran noir, mais le programme ralentit petit à petit puis s'arrete, et je suis obligé de forcer la fermeture de vb6.
Je pense qu'il s'agit d'une saturation de la ram à cause de la non libération des handles avec la fonction getdc. J'utilise pourtant deleteDC, mais je ne doit pas utiliser la bonne syntaxe

je procède comme ceci:
couleur=getpixel(getDC(0),x, y)
deleteDC (0)


j'ai comme l'impression que ça ne doit pas être de cette manière que l'on libère le DC, et que la ram sature après avoir effectué ce bout de code des milliers de fois?
Quelle est la bonne syntaxe? et quelle est la différence entre deleteDC et releaseDC?
merci d'avance!
0
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011
15 juil. 2011 à 13:51
ah ben voilà le problème est là, je réutilise getdc pour CHAQUE coordonée de l'écran... je pensais que c'est comme cela que s'utilisait la fonction, et qu'il fallait après chaque pixel, mettre un deleteDC. Je dois faire comment alors??
0
dieu360 Messages postés 30 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 10 septembre 2011
15 juil. 2011 à 15:25
ah effectivement en faisant comme ça, ça marche très bien en fait! j'avais regardé pour le DIB, mais je n'y avais malheureusement pas compris grand chose. merci encore ucfoutu!
0
Rejoignez-nous