Gérer le forum: Aide • Rechercher • Liste des Membres • Groupes d'utilisateurs
• S'enregistrer
• Profil • Se connecter pour vérifier ses messages privés
• Connexion
Auteur |
Message |
St3pH
Newbiiiie
Sexe:
Messages: 2
|
Posté le:
Dim 12 Juin 2005 - 11:36 |
|
Bonjour,
j'essaye actuellement de faire un peu de multitâche sous builder c++ mais un petit problème se pose à moi lorsque je veux faire appelle aux fonctions du thread suplémentaire.
Après avoir ajouter un thread (Fichier->nouveau->autre->Objet Thread builder créé un nouveau .h contenant la nouvelle classe :
Code: |
class raqG : public TThread
{
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // doit être 0x1000
LPCSTR szName; // pointeur sur le nom (dans l'espace d'adresse de l'utilisateur)
DWORD dwThreadID; // ID de thread (-1=thread de l'appelant)
DWORD dwFlags; // réservé pour une future utilisation, doit être zéro
} THREADNAME_INFO;
private:
void SetName();
protected:
void __fastcall Execute();
public:
__fastcall raqG(bool CreateSuspended);
};
|
+ un .cpp contenant :
Code: |
void raqG::SetName()
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = "raqG";
info.dwThreadID = -1;
info.dwFlags = 0;
__try
{
RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD),(DWORD*)&info );
}
__except (EXCEPTION_CONTINUE_EXECUTION)
{
}
}
//---------------------------------------------------------------------------
void __fastcall raqG::Execute()
{
// Placez le code de votre thread ici
}
|
Mon problème vient de l'appelle de la méthode "Execute()" créée par builder, la seule façon que j'ai trouvée est : MonObjetThread->resume();
J'utilise ce multitâche pour un jeux de type "pong", je compte avoir un thread pour chaque raquette et un pour la balle.
J'utilise la méthode de la forme "OnKeyDown" pour faire bouger mes raquettes, mais lorsque je fais appelle à MonObjetThread->resume(); le code du Thread est executer qu'une fois, alors que si je met le même code directement dans ma fonction "OnKeyDown' cela marche comme ça devrait (tant qu'on appuye sur la touche ça execute). Le contenu est du code bateau : MaForm->MonObjet->top += 10;
Bref tout ça pour savoir comment appeler et executer un thread supplémentaire =)
Merci. |
|
|
|
|
N'oubliez pas de vous inscrire à la communauté pour participer. Si vous êtes déjà membre, connectez-vous pour faire disparaître ce bandeau publicitaire. |
mastervanou
Accro à Web-IG
Sexe:
Messages: 162
Localisation: 95100
|
Posté le:
Dim 12 Juin 2005 - 11:55 |
|
|
|
|
St3pH
Newbiiiie
Sexe:
Messages: 2
|
Posté le:
Lun 13 Juin 2005 - 10:56 |
|
J'avais déjà essayé ce tuto mais il ne répond pas à mes questions :
- Il n'explique pas comment faire un appel direct à ses propres fonctions depuis la forme (afin de pouvoir leur passer des paramètres sans avoir recourt à "Synchronize(MaFonction);"
- Si par exemple dans "FormKeyDown" on met un code du style :
"Fpong->Img1->Top += 1;"
cela n'equivaut pas à mettre dans "raqG::Execute()" (ou dans une autre fonction du thread) le même code car celui-ci sera executer qu'une fois et non pas tant que j'ai une touche enfoncée.
J'ai essayé quelque chose du genre dans mes fonctions du thread :
Code: |
while(Form1->OnKeyPress) {
Form1->Img1->Top += 1;
}
|
là le code s'execute et ne s'arrete plus =)
Voila, dsl pas facile d'être clair pour expliquer ce genre de chose .... et je passe mon oral Mercredi 15/06 o_O |
|
|
|
|
|
|
Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|