Dans les règles du forum que tu as lues, il y a écrit comment poster du code correctement.
Alors déjà, je comprends pas pourquoi tu utilises un void* en C++. Il n'y a aucune raison de le faire.
Tu déclares mon_thread comme une fonction, je ne suis pas sûr que c'est ce que tu voulais. Et pour réaffecter un thread tu peux tout simplement faire =. C'est déplaçable.
J'ai corrigé la déclaration de mon_thread et crée le thread dans le constructeur avec le code proposé. J'ai 'enfin) une compilation sans erreur.
Cependant le programme plante à l’exécution
Voici le code
#include <iostream>
#include <thread>
#include <unistd.h> //
using namespace std;
/////////////////////////////////////////////////
class TESTT
{
public:
TESTT();
void ecrit(int);
private:
//static void* TH_sortie( void *arguments ); // methode appelee par le thread
static void TH_sortie(void); // methode appelee par le thread
thread mon_thread;
int sortie; // attribut a afficher
};
//////////////////////////////////////////////////
//Methodes de la classe TESTT
//////////////////////////////////////////////////
TESTT::TESTT()
{
thread mon_thread(TESTT::TH_sortie);
mon_thread = thread([this] () { TH_sortie();
});
mon_thread.join();
}
void TESTT::ecrit(int i)
{
cout<<"sortie = "<<i<<endl;
sortie=i;
}
//void* TESTT::TH_sortie( void *arguments )
void TESTT::TH_sortie()
{
while(1) {
thread::id mon_id = this_thread::get_id();
cout<<"Thread appele -> "<<mon_id<<endl;
//cout<<sortie<<endl;
usleep(999999);
}
}
////////////// PP ////////////////////////////////////////
int main (void)
{
int n=0,m=0;
TESTT th1;
TESTT th2;
while(1)
{
th1.ecrit(n);
th2.ecrit(m);
n++;
m--;
usleep(500000);
}
return 0 ;
}
Et voici le message d'erreur
tTerminate called without an active exception hread appele -> Thread appele -> 32
Thread appele -> Thread appele -> 23
Process returned 3 (0x3) execution time : 4.117 s Press any key to continue.
D'après mes recherches, cela proviendrait d'un thread non détaché... Mais je veux une exécution périodique des threads. Je ne comprends pas le problème
Merci Markand, mais cela ne résout pas mon problème.
Je travaille sur Raspberry , je cherche à créer une class qui gère une étiquette de quatre afficheurs 7 segments. Dans main on met à jour un simple tableau de quatre entiers Dans un thread actif toutes les 10mS environ, les afficheurs sont multiplexés et mis à jour. Le thread ne doit jamais s'arrêter, et être "invisible" dans le main.
Voici ce que j'ai commencé à faire avant de me heurter au pb de la création d'un thread dans le constructeur. J'ai d'abord utilisé pthread, puis j'ai découvert thread en C++11, ou la création de thread est plus simple (me semble t il)
#ifndef ETIQ7SEG_H
#define ETIQ7SEG_H
//#include <pthread.h>
#include <thread>
class ETIQ7SEG
{
public:
ETIQ7SEG(int a, int b, int c, int d, int e, int f, int g, int dp, int c1, int c2, int c3, int c4);
~ETIQ7SEG();
int ecrit(int);
private:
void aff7seg(int aff,int n);
static void PI_thread( void ); thread mon_thread; int aff[4]; // 4 nombres a afficher
int anoA,anoB,anoC,anoD,anoE,anoF,anoG,anoDP,catho1,catho2,catho3,catho4; // config materiel
};
#endif
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.