bip98
Messages postés104Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention29 avril 2008
-
15 févr. 2005 à 10:39
bip98
Messages postés104Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention29 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
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 16 févr. 2005 à 12:02
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. :-)
bucherb
Messages postés412Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention13 août 2007 16 févr. 2005 à 14:09
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..
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 15 févr. 2005 à 10:54
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.
bucherb
Messages postés412Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention13 août 2007 15 févr. 2005 à 10:57
... 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.
bip98
Messages postés104Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention29 avril 20081 15 févr. 2005 à 11:12
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)..
bucherb
Messages postés412Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention13 août 2007 16 févr. 2005 à 09:07
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.
bip98
Messages postés104Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention29 avril 20081 16 févr. 2005 à 13:35
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 ?
bip98
Messages postés104Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention29 avril 20081 22 févr. 2005 à 14:20
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);
}
}
}
}
}