cs_Finality
Messages postés76Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention22 janvier 2009
-
15 déc. 2007 à 10:44
Le newbie
Messages postés200Date d'inscriptionmardi 17 octobre 2006StatutMembreDernière intervention24 mars 2012
-
17 déc. 2007 à 12:52
Bonjour tout le monde,
Je suis actuellement en train de développer un casse brique. Pour le
faire fonctionner, j'utilise 2 timers : un pour gérer le mouvement de
la balle et un pour le mouvement des bonus. De plus, j'utilise un
MouseMove pour déplacer la raquette à la souris :
picRaquette.Left = e.X + (picRaquette.Width/2)
Mon probleme est que quand je bouge la souris, la
balle s'arrete de bouger, et que quand le timer pour les bonus
s'enclenche, la balle se met à "ramer". Mon prof d'informatique m'a dit
que cela provenait du fait que VB ne pouvait gérer qu'une procédure à
la fois. Est-ce bien ça? Si oui comment puis-je faire pour résoudre ce
probleme?
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 15 déc. 2007 à 10:55
Salut,
Je ne sais pas si cela peut t'aider, mais dans tes procédures qui aaparement "tourne" très souvent, essaye de mettre un DoEvents dans celles-ci...Cela permet de rendre la main au système quelques milli-secondes et ainsi permettre au système de traiter d'autres opérations...
Si pas de DoEvents en .net, il y a peut-être un équivalent..
A+
Exploreur
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 15 déc. 2007 à 11:00
Si tu es en VB6, tu ne vas malheureusement pas avoir beaucoup de solutions.
Par contre si tu es en VB2005 comme l'indique la rubrique ou tu as posté, tu peux utiliser le mécanisme de Threads.
Par défaut ton programme fonctionne dans un thread qui est allouer au processus. Mais tu peux creer d'autres threads pour certaines parties de ton code qui peuvent fonctionnées indépendamment et en parallèle du reste du programme.
Ainsi tu pourrais avoir le thread principal du programme plus un thread pour le timer de la balle et un autre pour les bonus.
cs_Finality
Messages postés76Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention22 janvier 2009 15 déc. 2007 à 11:35
tout d'abord merci à vous tous pour votre aide (j'espere pouvoir arriver un jour à ce que ce soit moi qui vous aide )
Donc à ce que s'en dégache, je dois utiliser les threads. (oui je suis en VB 2005) Le probleme c'est que je ne connais pas du tout les threads. Auriez vous un lien pour un tuto ou alors pourriez vous m'expliquez comment cela fonctionne?
Je vais essayer d'uploader mon programme pour que vous puissez voir le code
nicomilville
Messages postés3472Date d'inscriptionlundi 16 juillet 2007StatutMembreDernière intervention28 février 201436 15 déc. 2007 à 13:51
pour ce qui est de nous aider ne t'en fait pas(regarde l'age que j'ai, il n'y a pas si longtemps que ça je me disais que je ne pourais jamais aider personne et depuis j'ai iadé un nombre considérable de personne) Tout ça pour te dire que je suis sûr qu'un jour tu saura nous aider et puis LE FORUM CODE SOURCE EST LA POUR NOUS AIDER, IL EST LA POUR CA !!!
J'ai bien suivi toutes les instructions et voilà le code que j'obtiens :
Imports System.Threading
Public Class Form1
Private trd As Thread
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
MessageBox.Show("This is the main thread")
End Sub
Private Sub ThreadTask()
Dim stp As Integer
Dim newval As Integer
Dim rnd As New Random()
Do
stp = ProgressBar1.Step * rnd.Next(-1, 2)
newval = ProgressBar1.Value + stp
If newval > ProgressBar1.Maximum Then
newval = ProgressBar1.Maximum
ElseIf newval < ProgressBar1.Minimum Then
newval = ProgressBar1.Minimum
End If
ProgressBar1.Value = newval
Thread.Sleep(100)
Loop
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
trd = New Thread(AddressOf ThreadTask)
trd.IsBackground = True
trd.Start()
End Sub
End Class, ----
(Coloration syntaxique automatique par Kenji)
Le probleme c'est que quand je lance l'application, j'obtiens cette erreur :
Comment puis-je résoudre cette erreur et d'où vient-elle?
Je vous remercie pour votre réponse
Cordialement
Kevin PERRIAT
Le newbie
Messages postés200Date d'inscriptionmardi 17 octobre 2006StatutMembreDernière intervention24 mars 20122 17 déc. 2007 à 12:52
Salut Finality, ton erreur vient du fait que tu veux gérer les objets de ta form (ici la progressbar) depuis ton thread. Un thread est comme un process si tu veux. Il est lancer par ton appli pour te permettre de faire du travail en tâche de fond. C'est comme si tu avais donc deux processus : un pour ton affichage graphique et un pour le travail de fond.
Voilà pour l'explication générale. Je ne connais pas de moyens pour faire communiquer les thread entre eux (regarde mon pseudo !!!) comme tu veux le faire mais si quelqu'un le sait, je serais intéréssé.
En tout cas accroche toi bien fort car ça doit pas être simple la communication inter thread. Bon courage.