[QtCreator] Plante sur les longs calculs...

07Select -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai réaliser un programme de traitement d'image (beaucoup de calculs enchainées).

Le problème c'est que le programme marche niquel, mais plante des que le nombre de calcul deviens trop important.

Comment je peux faire?

J'ai entendu parler des thread mais je crois pas que ca change vraiment quelque chose.
Je ne tiens pas a ce que l'interface graphique soit toujours disponible pendant les calculs, mais simplements que lors de la fin, le programme réponde normalemnt...




7 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je pense que c'est juste un problème de rafraîchissement de la fenêtre, tous le processus est utilisé pour le traitement d'image, et "oublie" le MainWindow alors que Windows s'attends à avoir régulièrement des "nouvelles" de chacune de ses fenêtres.

Même si la fenêtre "ne réponds pas", laisse le programme se dérouler jusqu'à la fin (regarde les performances dans le gestionnaire des tâches), une fois le traitement terminé la fenêtre devrait revenir.
Une petite astuce pourrait-être de faire une barre de progression qui, modifiée régulièrement, permettrait d'indiquer à Windows que la fenêtre est toujours utilisée.
1
francis
 
Salut
places quelques QCoreApplication::processEvents(); le long des traitements, ça devrait empecher le "ne répond pas"
1
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Quand tu dis que ça plante, tu veux dire que la fenêtre se fige et que Windows indique que le programme ne répond pas ?
Si c'est ça, ça ne veut pas forcément dire que ton programme plante, juste qu'il oublie de se manifester auprès du système...
0
07Select
 
Merci d'avoir répondu,

Quand ca plante en gros y a la fenetre MainWindow ( mon programme ) qui est innaccessible ("ne réponds pas" si je clic dessu) mais Qt marche toujours.

Dans mon programme je peux saisir a la zone d'image a traité, et des qu'elle devient trop grande c'est foutu le programme plante.

Et si il oubli de se manifester comme tu le dis sous window, comment je peux corriger le tir?
0

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

Posez votre question
07Select
 
Ok donc je vais tester de faire "forcer" un rafraichissement d'image pour tester ton idée.
Merci, je tiens au courant...
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Ton programme ne plante pas forcément s'il ne répond plus, c'est peut être que le calcul est trop long. En effet dans ce cas là un thread pourrait t'aider. En effet, si tu lances tes calculs dans un thread séparé, ils se dérouleront de manière concurrente au reste du programme. Du coup ta fenêtre répondra, mais il faut faire attention à ce qu'il soit impossible d'aller modifier tes données.
Une autre raisons à ce "ne répond pas" c'est que tu as un bug dans ton programme et que tu tombes, par exemple, dans une boucle infini.
0
07Select
 
Ok alors ca marche :
j'ai ajouter une progress bar qui me permet d'actualiser ma fenetre un minimum et un QCoreApplication ca a suffi.

J'ai une autre question du coup :

pourquoi le traitement d'une image 200x200 prend il 2secondes alors que du 300x300 met plus d'une minute???

a savoir j'utilise toujours le meme algo tout au longs du traitement quelque soit l'image...

Est ce que le systeme peut saturé et etre ralenti??? une question de buffer ou je ne sais quoi? Si vous avez des idées ca m'interesse.

Merci a tous
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
oui, mais quel algorithme ?
en passant de 200² à 300², tu multiplie par 2,25 ton nombre de pixel. Il faut savoir que selon le type d'algorithme, le temps passé peut évoluer en fonction du logarithme du nombre de points, proportionnellement avec le nombre de point, au carré, ou même de manière exponentielle.
Ce qui peut expliquer que tu explose les temps de calcul.
0