[C]Super colle

Fermé
Tisiph0n3 - 9 févr. 2008 à 12:44
 Tisiph0n3 - 15 févr. 2008 à 21:48
Bonjour j'ai un probleme avec un programme, mais vraiment bizarre le probleme vous allez voir....
Donc j'explique, j'ai mis au point un programme de tracé de fonctions mathématiques usuelles, genre log, exp, cos etc etc
Tout marche nickel, les courbes sont moches mais elles sont completes. J'utilise la lib math comme vous vous en doutez, et (c'est pour un projet a rendre) l'énoncé precisait qu'il ne fallait pas betement tracer tous les points mais en tracer suffisament et les relier ensuite entre eux, jusque là pas de pb tout est bon.
Pour afficher des choses a l'écran j'utilise une surcouche basique de la LibX.
L'execution se déroule ainsi:
-l'utilisateur lance le programme avec l'option qu'il veut

-je créee la fenetre

-j'y dessine les axes x y ainsi que le repère pour l'unité

-j'appelle la fonction de trace de courbe correspondante a l'option choisie
Cette fonction place un point, puis un deuxieme et appelle la fonction qui relie les points entre eux en lui passant les coordonnées des deux points qu'elle vient de tracer

-En cas d'expose (effacement partiel ou total du contenu de la fenetre), j'efface completement le contenu de la fenetre et redessine tout, les axes, les marqueurs et la courbe. Cet evenement arrive 3 fois dès qu'on lance le programme (je ne sais pas pourquoi)

-Si l'utilisateur appuie sur entrée je redessine la courbe

-S'il appuie sur une touche du keypad il obtient la courbe correspondante a ce numero d'option sans devoir relancer le programme, donc j'efface le contenu de la fenetre, pour tout redessiner ensuite mais avec la courbe demandée

Maintenant que j'ai planté le décor je peux poser ma question, donc:
L'embrouille c'est que si l'utilisateur lance le prog avec l'option 9 l'option la plus lente a dessiner, eh ben ça sera vraiment lent (environ 30sec), mais maintenant s'il lance le prog avec l'option 1, et qu'il demande ensuite l'option 9 en appuyant sur la touche neuf du keypad eh bien l'option neuf qui était si lente a afficher cette fois elle s'affiche de maniere quasi instantanée.

Voici un rapport d'execution fait avec gprof pour l'option 9 quand on la demande d'entrée:

index % time self children called name
0.15 0.00 3105/3105 tn [2]
[1] 75.0 0.15 0.00 3105 complete [1]
-----------------------------------------------
0.00 0.05 1/3 draw [6]
0.00 0.10 2/3 redraw [3]
[2] 75.0 0.00 0.15 3 tn [2]
0.15 0.00 3105/3105 complete [1]
-----------------------------------------------
0.00 0.05 1/2 exit_on_esc [5]
0.00 0.05 1/2 mlx_loop [4]
[3] 50.0 0.00 0.10 2 redraw [3]
0.00 0.10 2/3 tn [2]
0.00 0.00 2/3 draw_background [11]
-----------------------------------------------
<spontaneous>
[4] 50.0 0.00 0.10 mlx_loop [4]
0.00 0.05 2/2 exit_on_esc [5]
0.00 0.05 1/2 redraw [3]
-----------------------------------------------
0.00 0.05 2/2 mlx_loop [4]
[5] 25.0 0.00 0.05 2 exit_on_esc [5]
0.00 0.05 1/2 redraw [3]
0.00 0.00 1/1 handle_draw_2 [15]
-----------------------------------------------
0.00 0.05 1/1 main [7]
[6] 25.0 0.00 0.05 1 draw [6]
0.00 0.05 1/3 tn [2]
0.00 0.00 1/3 draw_background [11]
-----------------------------------------------
<spontaneous>
[7] 25.0 0.00 0.05 main [7]
0.00 0.05 1/1 draw [6]
0.00 0.00 1/1 check_param [13]
0.00 0.00 1/1 make_title [16]
0.00 0.00 1/1 create_win [14]
-----------------------------------------------
<spontaneous>
[8] 15.0 0.03 0.00 mlx_pixel_put [8]
-----------------------------------------------
<spontaneous>
[9] 5.0 0.01 0.00 mlx_int_get_good_color [9]
-----------------------------------------------
<spontaneous>
[10] 5.0 0.01 0.00 mlx_string_put [10]
-----------------------------------------------
0.00 0.00 1/3 draw [6]
0.00 0.00 2/3 redraw [3]
[11] 0.0 0.00 0.00 3 draw_background [11]
0.00 0.00 3/3 draw_scal [12]
-----------------------------------------------
0.00 0.00 3/3 draw_background [11]
[12] 0.0 0.00 0.00 3 draw_scal [12]
-------------------------- 0.00 0.00 1/1 main [7]
[13] 0.0 0.00 0.00 1 check_param [13]
-----------------------------------------------
0.00 0.00 1/1 main [7]
[14] 0.0 0.00 0.00 1 create_win [14]
-----------------------------------------------
0.00 0.00 1/1 exit_on_esc [5]
[15] 0.0 0.00 0.00 1 handle_draw_2 [15]
-----------------------------------------------
0.00 0.00 1/1 main [7]
[16] 0.0 0.00 0.00 1 make_title [16]
-----------------------------------------------
---------------------

Voila merci a ceux qui prendront le temps de m'aider :)

3 réponses

up! :D
0
Vraiment personne ne voit? :D ou ptet que je suis pas assez clair?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
12 févr. 2008 à 09:39
Sans avoir le source, c'est pas évident à dire.
Mais je pense que ta fonction initiale et celle qui retrace doivent être différentes.
Sinon, il est possible que ta boucle soit mal faite de sorte que tu recalcule tout mais n'affiche qu'un point supplémentaire à chaque fois.
Si tu utilise les thread, il est possible que le processeur soit occuper à finir d'initialiser autre chose.
0
En fait non j'appelle exactement la meme fonction pour recalculer la courbe.
Euh j'ai pas compris ta deuxieme hypothèse
Et non je n'utilise pas les threads
mais merci ^^
0