cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 2009
-
20 déc. 2006 à 17:56
cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 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 :
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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...
cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 20091 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 !
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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...