J'ai une application multi threadée avec le thread principal qui
lance un autre thread en lui donnant en paramètre un smart pointer
(c'est pas tout à fait ça mais presque). Je voudrais déclarer dans
mon thread secondaire le smart pointer comme volatile, mais ça
marche pas (à l'utilisation):
boost::shared_ptr<int> v1( new int );
if ( v1 ) // ok
{
}
volatile boost::shared_ptr<int> v2( new int );
if ( v2 ) // erreur de compilation ici
{
}
J'ai une application multi threadée avec le thread principal qui
lance un autre thread en lui donnant en paramètre un smart pointer
(c'est pas tout à fait ça mais presque). Je voudrais déclarer dans
mon thread secondaire le smart pointer comme volatile, mais ça
marche pas (à l'utilisation):
boost::shared_ptr<int> v1( new int );
if ( v1 ) // ok
{
}
volatile boost::shared_ptr<int> v2( new int );
if ( v2 ) // erreur de compilation ici
{
}
J'ai une application multi threadée avec le thread principal qui
lance un autre thread en lui donnant en paramètre un smart pointer
(c'est pas tout à fait ça mais presque). Je voudrais déclarer dans
mon thread secondaire le smart pointer comme volatile, mais ça
marche pas (à l'utilisation):
boost::shared_ptr<int> v1( new int );
if ( v1 ) // ok
{
}
volatile boost::shared_ptr<int> v2( new int );
if ( v2 ) // erreur de compilation ici
{
}
Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread sauf si c'est documente explicitement par ton compilateur
et que tu n'envisages pas qu'un autre soit possible.
C'est quoi l'erreur?
Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread sauf si c'est documente explicitement par ton compilateur
et que tu n'envisages pas qu'un autre soit possible.
C'est quoi l'erreur?
Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread sauf si c'est documente explicitement par ton compilateur
et que tu n'envisages pas qu'un autre soit possible.
C'est quoi l'erreur?
C'est cool ça marche
bien. Reste que ce pointeur est mis à NULL par un autre thread que celui qui
l'utilise, d'où ma volonté de mettre volatile, pour être parfait.
que...C'est quoi l'erreur?
Alors pour l'exemple donné l'erreur avec VC++ 7.1 c'est:
error C2451: expression conditionnelle de type
'volatile boost::shared_ptr<T>' non conforme
C'est cool ça marche
bien. Reste que ce pointeur est mis à NULL par un autre thread que celui qui
l'utilise, d'où ma volonté de mettre volatile, pour être parfait.
que...
C'est quoi l'erreur?
Alors pour l'exemple donné l'erreur avec VC++ 7.1 c'est:
error C2451: expression conditionnelle de type
'volatile boost::shared_ptr<T>' non conforme
C'est cool ça marche
bien. Reste que ce pointeur est mis à NULL par un autre thread que celui qui
l'utilise, d'où ma volonté de mettre volatile, pour être parfait.
que...C'est quoi l'erreur?
Alors pour l'exemple donné l'erreur avec VC++ 7.1 c'est:
error C2451: expression conditionnelle de type
'volatile boost::shared_ptr<T>' non conforme
Je lance un thread depuis une fenêtre, la fenêtre affiche l'avancement du
thread. Si jamais la fenêtre est fermée avant que le thread ne se termine,
Qt va détruire l'objet fenêtre, et le pointeur donné au thread devient
invalide,
Je lance un thread depuis une fenêtre, la fenêtre affiche l'avancement du
thread. Si jamais la fenêtre est fermée avant que le thread ne se termine,
Qt va détruire l'objet fenêtre, et le pointeur donné au thread devient
invalide,
Je lance un thread depuis une fenêtre, la fenêtre affiche l'avancement du
thread. Si jamais la fenêtre est fermée avant que le thread ne se termine,
Qt va détruire l'objet fenêtre, et le pointeur donné au thread devient
invalide,
Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread
Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread
Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread
bool la_fenetre_existe;
HandleCriticalSection mutex;
bool la_fenetre_existe;
HandleCriticalSection mutex;
bool la_fenetre_existe;
HandleCriticalSection mutex;
On 03 Feb 2005 16:28:06 +0100, Jean-Marc Bourguet :Volatile n'est vraissemblablement pas la solution d'un
probleme de multithread
Je dirais même plus : il me semble que volatile est surtout
utilisé sur des systèmes ne gérant pas plusieurs threads, et
sert à indiquer que la variable peut être modifiée par une
interruption. En gros, sous DOS, ça pouvait peut-être servir ;
sous Windows 32 bits, guère.
On 03 Feb 2005 16:28:06 +0100, Jean-Marc Bourguet <jm@bourguet.org>:
Volatile n'est vraissemblablement pas la solution d'un
probleme de multithread
Je dirais même plus : il me semble que volatile est surtout
utilisé sur des systèmes ne gérant pas plusieurs threads, et
sert à indiquer que la variable peut être modifiée par une
interruption. En gros, sous DOS, ça pouvait peut-être servir ;
sous Windows 32 bits, guère.
On 03 Feb 2005 16:28:06 +0100, Jean-Marc Bourguet :Volatile n'est vraissemblablement pas la solution d'un
probleme de multithread
Je dirais même plus : il me semble que volatile est surtout
utilisé sur des systèmes ne gérant pas plusieurs threads, et
sert à indiquer que la variable peut être modifiée par une
interruption. En gros, sous DOS, ça pouvait peut-être servir ;
sous Windows 32 bits, guère.
On 03 Feb 2005 16:28:06 +0100, Jean-Marc Bourguet :Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread
Je dirais même plus : il me semble que volatile est surtout utilisé
sur des systèmes ne gérant pas plusieurs threads, et sert à indiquer
que la variable peut être modifiée par une interruption. En gros,
sous DOS, ça pouvait peut-être servir ; sous Windows 32 bits, guère.
On 03 Feb 2005 16:28:06 +0100, Jean-Marc Bourguet <jm@bourguet.org>:
Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread
Je dirais même plus : il me semble que volatile est surtout utilisé
sur des systèmes ne gérant pas plusieurs threads, et sert à indiquer
que la variable peut être modifiée par une interruption. En gros,
sous DOS, ça pouvait peut-être servir ; sous Windows 32 bits, guère.
On 03 Feb 2005 16:28:06 +0100, Jean-Marc Bourguet :Volatile n'est vraissemblablement pas la solution d'un probleme de
multithread
Je dirais même plus : il me semble que volatile est surtout utilisé
sur des systèmes ne gérant pas plusieurs threads, et sert à indiquer
que la variable peut être modifiée par une interruption. En gros,
sous DOS, ça pouvait peut-être servir ; sous Windows 32 bits, guère.
On Thu, 3 Feb 2005 17:44:08 +0100, "Aurélien REGAT-BARREL"
:Je lance un thread depuis une fenêtre, la fenêtre affiche
l'avancement du thread. Si jamais la fenêtre est fermée avant
que le thread ne se termine, Qt va détruire l'objet fenêtre,
et le pointeur donné au thread devient invalide,
Tu as donc une classe Fenetre et une classe ThreadCalcul.
Ce bout de code devrait fonctionner :
Fenetre::~Fenetre()
{
pointeur_thread_calcul-> NotificationDestructionFenetre();
}
class ThreadCalcul
{
public:
void NotificationDestructionFenetre()
{
HandleCriticalSection::Lock (mutex);
la_fenetre_existe= false;
}
private:
bool la_fenetre_existe;
HandleCriticalSection mutex;
bool LaFenetreExiste()
{
HandleCriticalSection::Lock (mutex);
return la_fenetre_existe;
}
void MiseAJourFenetre()
{
if (LaFenetreExiste())
fenetre-> MiseAJourAffichage();
}
};
On Thu, 3 Feb 2005 17:44:08 +0100, "Aurélien REGAT-BARREL"
<nospam-aregatba@yahoo.fr.invalid>:
Je lance un thread depuis une fenêtre, la fenêtre affiche
l'avancement du thread. Si jamais la fenêtre est fermée avant
que le thread ne se termine, Qt va détruire l'objet fenêtre,
et le pointeur donné au thread devient invalide,
Tu as donc une classe Fenetre et une classe ThreadCalcul.
Ce bout de code devrait fonctionner :
Fenetre::~Fenetre()
{
pointeur_thread_calcul-> NotificationDestructionFenetre();
}
class ThreadCalcul
{
public:
void NotificationDestructionFenetre()
{
HandleCriticalSection::Lock (mutex);
la_fenetre_existe= false;
}
private:
bool la_fenetre_existe;
HandleCriticalSection mutex;
bool LaFenetreExiste()
{
HandleCriticalSection::Lock (mutex);
return la_fenetre_existe;
}
void MiseAJourFenetre()
{
if (LaFenetreExiste())
fenetre-> MiseAJourAffichage();
}
};
On Thu, 3 Feb 2005 17:44:08 +0100, "Aurélien REGAT-BARREL"
:Je lance un thread depuis une fenêtre, la fenêtre affiche
l'avancement du thread. Si jamais la fenêtre est fermée avant
que le thread ne se termine, Qt va détruire l'objet fenêtre,
et le pointeur donné au thread devient invalide,
Tu as donc une classe Fenetre et une classe ThreadCalcul.
Ce bout de code devrait fonctionner :
Fenetre::~Fenetre()
{
pointeur_thread_calcul-> NotificationDestructionFenetre();
}
class ThreadCalcul
{
public:
void NotificationDestructionFenetre()
{
HandleCriticalSection::Lock (mutex);
la_fenetre_existe= false;
}
private:
bool la_fenetre_existe;
HandleCriticalSection mutex;
bool LaFenetreExiste()
{
HandleCriticalSection::Lock (mutex);
return la_fenetre_existe;
}
void MiseAJourFenetre()
{
if (LaFenetreExiste())
fenetre-> MiseAJourAffichage();
}
};
Dans son cas, la solution serait sans doute celle imposée par
Qt, que je connais pas. Dans les systèmes de fenêtrage que je
connais, toutes les mises à jours des graphiques se font dans un
thread particulier, qui est aussi celui que gère les
évenemments.
Dans son cas, la solution serait sans doute celle imposée par
Qt, que je connais pas. Dans les systèmes de fenêtrage que je
connais, toutes les mises à jours des graphiques se font dans un
thread particulier, qui est aussi celui que gère les
évenemments.
Dans son cas, la solution serait sans doute celle imposée par
Qt, que je connais pas. Dans les systèmes de fenêtrage que je
connais, toutes les mises à jours des graphiques se font dans un
thread particulier, qui est aussi celui que gère les
évenemments.