Problème de boucle DirectX ...

cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 - 20 déc. 2006 à 17:56
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 - 20 déc. 2006 à 23:57
Bonjour à tous,

Voila à quoi resemble mon code :

Public bRun as Boolean
Private Sub Form_Load()
       bRun = True
       Me.show
       Call Init
       Form2.visible = True
       Timer1.enable = True
End Sub

Sub Init()

    While bRun
        ... 'Code directX de la boucle de rendu
    WEnd

End Sub
(c'est simplifié pour ne montrer que le problème au quel je fait face !)

Mon problème est le suviant : Quand je lance ma form (Form_Load) la boucle infinie s'enclanche et c'est normal (c'est comme ca pour le directX) et a ce moment là : Plus de reponce de Form_Load (normal, il attend la fin de init qui ne se fait qu'a la fin du programme) or, je veut lancer Form2 et Timer1, et ca avant Init, donc ce que je veut c'est que j'ai un Call
qui ne fasse que lancer la sub et qui n'attend pas la fin de l'instruction pour lacher la main !

Bien sur si vous avez une remarque du style
 c'est moche le "Timer1" , nome tes composants!

Vous pouvez passer votre chemin !

Je cherche uniquement à faire ca :
un Call
qui ne fasse que lancer la sub et qui n'attend pas la fin de l'instruction pour lacher la main ! Et avoir un code simple du style :

             CallWithOutWait Init

J'attend avec impatience vos reponces, Ergo5.

   

4 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
20 déc. 2006 à 18:32
Salut,
Ce que tu veux faire, c'est du multithreading, en vb6 c'est (quasi pour les puristes) impossible. Il faut faire du vb2005. Néanmoins en vb, je te déconseille grandement de faire une boucle infinie pour du directx. En général la boucle "infinie" de ton programme (i.e. la boucle générale qui gère les messages) est tranquillement gérée par vb et tu n'as qu'à t'occuper de gérer des évènements.
A ta place, ce que je ferais, c'est utiliser un timer pour le rendu (avec un interval style 40 ms) que tu lance à ton Call Init :


'Public bRun as Boolean
Private Sub Form_Load()
'bRun = True
'Tu remplaces bRun par TmrDraw.Enabled partout
Me.show
TmrDraw.Interval = 40
TmrDraw.Enabled = True
'Call Init
Form2.visible = True
Timer1.enable = True
End Sub

Sub TmrDraw_Tick()
... 'Code directX de la boucle de rendu
End Sub

Si tu tiens vraiment à ta boucle infinie, tu dois mettre un DoEvents dedans afin que vb puisse gérer les messages en attente à ce moment là et ainsi éviter que ton prog ne plante... Mais je te conseille de faire comme je t'ai dis...

Julien.
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
20 déc. 2006 à 22:14
Ok pour ce que tu viens de me dire, tu ne m'apprend rien, elas !!

Enfin, pour le timer, je n'ai pas encore essayé , mais ca m'a l'ai un peu dommage quand je peut monter a 1035 FPS, avec un timer de 40ms, ca va faire tomber les performances !
Mais bon pas besoin de 1035, 40 suffise donc j'essayerai le timer, mais dommage.

Merci quand même , je donne pas de "reponce accepté" car c'est pas ce que je voulais te réponce,
donc si quelqu'un a de quoi faire du MultiThrainig en VB je suis preneur !
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
20 déc. 2006 à 22:22
Non en effet, vraiment pas besoin de 1035 FPS, si tu veux tu peux mettre le timer plus bas... Mais 40 c'est la valeur conseillées par microsoft dans le sdk, et je me dis qu'ils s'y connaissent...
Pour le multithreading (tu nous invente un fameux mot sur ce coups là :p), n'espère rien de mieux qu'un DoEvents en vb6. Ca n'existe pas. Il faut passer en .Net pour avoir du multithreading. Mais même la je vois pas l'intérêt pour faire du directX... Mais bon, chacun ses vaches...

Julien.
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
20 déc. 2006 à 23:57
En effet comme tu m'as dit c'est largement suffisant puis sa bouffe pas tout l'uc !!
0
Rejoignez-nous