pause et reprise de thread
	
	
		Salut !
Bon je developpe un programme qui doit piloter un moteurs pas à pas. Pour cela j'ai une interface qui lance un thread contenant les ordres de déplacements des moteurs. Sur cette interface je veux mettre un bouton pause/reprise et un bouton arrêt d'urgence. Mon problème est le suivant : l'appel de la méthode suspend () du thread est inefficasse, le mouvement continue toujours.
Merci de votre aide.
code de l'interface :
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 
 |  
 
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
 
void __fastcall TForm1::threadClick(TObject *Sender)
{
 generationthread () ;
}
void __fastcall TForm1::killerClick(TObject *Sender)
{
try {
monthread->Terminate() ; }
catch ( const EThread &e ) { ShowMessage ("thread fini avant"); return ;}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pauseClick(TObject *Sender)
{
  //compteur initialisé à 0 dans le header
try {
if ( compteur == 0 ) { monthread->Suspend(); compteur++ ; }
   else  { monthread->Resume() ; compteur-- ; }
   }
catch ( const EThread &e ) { ShowMessage ("thread inexistant");}
}
//---------------------------------------------------------------------------
void TForm1::generationthread ()  //creation du thread
{
  monthread = new essais ( true ) ;
  monthread->FreeOnTerminate = true ;
  monthread->Resume() ;
} | 
 et le code du thread : 
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 |  
__fastcall essais::essais(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall essais::Execute()
{
if (!Terminated){
 
a.ymove(-2000) ; // ordre de bouger à la position -2000
a.yfinmove() ;  //attente bloquante de fin de mouvement
Sleep ( 500 ) ;
}
 
if (!Terminated){
 
a.ymove(0) ; //ordre de revenir à la position de départ
a.yfinmove() ;  //attente bloquante de fin de mouvement
Sleep ( 500 ) ;
 
}
 
//le thread appel une méthode de l'interface pour générer un nouveau thread
// identique
if (!Terminated){ Form1->generationthread() ; }
} |