Class, thread, Erreur.. [Résolu]

Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 15 févr. 2005 à 10:39 - Dernière réponse :
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 23 févr. 2005 à 11:49
voilà mon code:

class Axe_move
{
//Attribu
private int i;
int[] v_moteur = new int[4];


//Constructeur
public Axe_move()
{
//Moteur avant, droite, valeur des pas
this.v_moteur[0]=10+192;
this.v_moteur[1]=6+192;
this.v_moteur[2]=5+192;
this.v_moteur[3]=9+192;
}


//méthodes
public void gauche(int v_pas)
{
this.i=v_pas;
Thread Time_break_motor_X;
motor_move move = new motor_move();
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x(this.i))); //ICI l'erreur
Time_break_motor_X.Start();
}


private class motor_move
{
int v_pas;
public void axe_x(int v_pas)
{
this.v_pas=v_pas;


}


}


}

J'ai une erreur de compilation.. je comprends pas.. c'est surement tout bête.
Il me marque: Nom de méthode attendu
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 16 févr. 2005 à 12:02
3
Merci
en fait d'apres ce que je disais ton code deviendrais qqch comme ça :
class Axe_move
{
//Attribu
private int i;
int[] v_moteur = new int[4];
private motor_move move;

//Constructeur
public Axe_move()
{
//Moteur avant, droite, valeur des pas
this.v_moteur[0]=10+192;
this.v_moteur[1]=6+192;
this.v_moteur[2]=5+192;
this.v_moteur[3]=9+192;
}


//méthodes
public void gauche(int v_pas)
{
this.i=v_pas;
Thread Time_break_motor_X;
move = new motor_move();
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x)); //ICI l'erreur
Time_break_motor_X.Start();
}


private class motor_move
{
int v_pas;
public void axe_x()
{
this.v_pas=v_pas;


}


}


}

Le tout maintenant est d'affecter ta valeur autrement, par une propriété par exemple.

Mais regarde du coté de la solution des delegates proposée par bucherb, ça me semble plus interressant dans ton cas. :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_coq
Meilleure réponse
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Dernière intervention
13 août 2007
- 16 févr. 2005 à 14:09
3
Merci
public class Axe_move
{
//Attribu
private int i;
private form1.struct_motor motor_struct_class;
//méthodes
public void gauche(form1.struct_motor structure)
{
this.motor_struct_class=strucutre;
}

Il faut bien que tu lui dise ou aller chercher ta structure..

-------------------------
Trambert le vert

Merci bucherb 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de bucherb
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 15 févr. 2005 à 10:54
0
Merci
La méthode associé à ton delegate ThreadStart ne doit pas avoir de paramètre.
Sinon tu declares ton instance move locale à la méthode, ce n'est pas bon, declare la plutot en tant que membre de la classe Axe_move.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Dernière intervention
26 décembre 2007
- 15 févr. 2005 à 10:54
0
Merci
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x(this.i))); //ICI l'erreur

Pas d'argument pour la methode appelé par un thread.

Il faut faire autrement en passant par un wrapper par exemple

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Dernière intervention
13 août 2007
- 15 févr. 2005 à 10:57
0
Merci
... ou par un délégué... Qui te fait exactement la même chose qu'un Thread, à ceci prêt qu'il est entièrement géré par le framework, et que tu peux lui passer des paramètres.

-------------------------
Trambert le vert
Commenter la réponse de bucherb
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Dernière intervention
26 décembre 2007
- 15 févr. 2005 à 11:02
0
Merci
C'est exact

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 15 févr. 2005 à 11:12
0
Merci
J'ai beaucoup de mal à comprendre ce vocabulaire technique !

Donc si j'ai bien compris, je ne peux pas passer de paramètre depuis mon thread.. Mais par contre je ne comprends pas comment faire pour passer le paramètre (en faisant différemment)..
Commenter la réponse de bip98
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Dernière intervention
13 août 2007
- 15 févr. 2005 à 11:58
0
Merci
Il faut que tu crée un délégué

private delegate void MonDelegate (object peuimporte);

et ensuite tu crée ta méthode

private void MaMethodeDelegate (object peuimporte)
{
SqlConnection.Open(); // etc......
}

Et pour l'éxecuter, tu fais dans ton code

new MonDelegate (MaMethodeDelegate).BeginInvoke (tonObjetPeuImporte,null.null);

A la place de "object peu importe" tu peux mettre le nombre de paramères qui te chante..

-------------------------
Trambert le vert
Commenter la réponse de bucherb
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Dernière intervention
13 août 2007
- 15 févr. 2005 à 12:00
0
Merci
le point entre les 2 null est bien sur une virgule ;-) Ce serait cool de pouvoir éditer ses messages lol..

-------------------------
Trambert le vert
Commenter la réponse de bucherb
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 16 févr. 2005 à 08:53
0
Merci
J'ai pas très bien compris pour les délégués ! J'ai trouvé une srouce sur:
http://www.csharpfr.com/code.aspx?ID=11492

Par contre la solution de M.Coq me semblait bien ! mais je l'ai pas trop compris ! Peux-tu me la reexpliquer ?
Commenter la réponse de bip98
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Dernière intervention
13 août 2007
- 16 févr. 2005 à 09:07
0
Merci
Un délégé c'est ce qui est utilisé pour gérer les évenements.

Donc quasiment de la même façon que tu crée un évenement, tu crée un délégué, la méthode qui va avec, et en utilistant MonDélégué.BeginInvoke ça va te créer un thread automatisé pour ta méthode.

-------------------------
Trambert le vert
Commenter la réponse de bucherb
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 16 févr. 2005 à 13:35
0
Merci
J'ai encore une petite question, mais cette fois c'est avec un envoie d'une structure dans la class:

Dans mon Form1:

public struct struct_motor
{
public string port_dev;
public int last_value;
public int v_pas;
public bool v_end;
}

public struct_motor motor_config;

motor_config = new struct_motor;

---> envoie dans la class:
Axe_move motor_class = new Axe_move();
motor_class.gauche(motor_config);

Dans la Class Axe_move:

public class Axe_move
{
//Attribu
private int i;
private struct_motor motor_struct_class;


//méthodes
public void gauche(struct_motor structure)
{
this.motor_struct_class=strucutre;
}

Il y a une erreur car dans ma class le compilateur me dit:
Le type ou le nom d'espace de noms 'struct_motor' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?
Commenter la réponse de bip98
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 16 févr. 2005 à 14:34
0
Merci
Merci, ça marche !
Commenter la réponse de bip98
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 22 févr. 2005 à 14:20
0
Merci
Désolé de vous déranger encore une fois..


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


J’ai un petit problème, je cherche depuis longtemps mais j’y arrive pas !!!





J’envoie une structure dans ma class.. Axe_move.gauche puis je voudrais reprendre cette


Structure et la renvoyer dans la class motor_move… mon problème est que j’arrive pas à l’envoyer à la class motor _move depuis Axe_move.gauche. Comment faire ?





Voilà mon code :

namespace Motor_class
{
public class Axe_move
{
//Attribu
private Test_moteur.f_moteur.struct_motor motor_struct_class;
//méthodes
public void gauche(Test_moteur.f_moteur.struct_motor structure_config)
{
this.motor_struct_class=structure_config;
Thread Time_break_motor_X;
motor_move move = new motor_move(this.motor_struct_class);
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x));
Time_break_motor_X.Start();
}


private class motor_move
{


int v_pas;
int v_ind;
int[] v_moteur = new int[4];



public motor_move(????) //Je voudrais recevoire la structure motor_struct_class ici
{


//Moteur avant, droite, valeur des pas
this.v_moteur[0] =10+192;
this.v_moteur[1]=6+192;
this.v_moteur[2]=5+192;
this.v_moteur[3]=9+192;
}


public void axe_x()
{

for(int go=0 ; go<motor_struct_class.v_pas ; go++)
{
try
{
using (Task digitalWriteTask = new Task("DigitalWriteTask"))
{
// Create an Digital Output channel and name it.
digitalWriteTask.DOChannels.CreateChannel("Dev1/Port1","",
ChannelLineGrouping.OneChannelForAllLines);
// Write digital port data. WriteDigitalSingChanSingSampPort writes a single sample
// of digital data on demand, so no timeout is necessary.
DigitalSingleChannelWriter writer = new DigitalSingleChannelWriter(digitalWriteTask.Stream);
writer.WriteSingleSamplePort(true, (int)this.v_moteur[motor_struct_class.v_ind]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
v_ind++;
if(motor_struct_class.v_ind>3)
motor_struct_class.v_ind=0;
Thread.Sleep(0);
}
}
}
}
}
Commenter la réponse de bip98
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
29 avril 2008
- 23 févr. 2005 à 11:49
0
Merci
C'est bon j'ai trouvé... j'ai peut.etre posté un peu vite.. désolé !
Commenter la réponse de bip98

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.