J'utilise un objet pour démarrer le thread boost et il a quelques variables membres publiques que je modifie dans le thread (dans l'opérateur()). Comment puis-je accéder aux variables membres de l'objet depuis l'extérieur du thread?accéder à la variable membre de l'objet thread boost
J'ai essayé d'utiliser un mutex (défini dans la classe de l'objet) qui est verrouillé dans l'opérateur() de l'objet et de l'extérieur, mais cela ne semble pas fonctionner.
Voici le code objet thread:
struct Mouse
{
int x, y;
string port;
boost::mutex mutex;
Mouse(const string& p) : port(p) { x = y = 0; }
Mouse(const Mouse& m) : mutex() { x = m.x; y = m.y; port = m.port; }
void operator()()
{
ifstream ifs;
ifs.open (port.c_str(), ios::binary);
if (!ifs.is_open())
{
cout << "Impossible d'ouvrir " << port.c_str() << "\n";
exit(0);
}
while (true) //modify x, y in infinit loop
{
char buf[3];
ifs.read(buf, 3);
unsigned char * msg = (unsigned char *) buf;
unsigned char xsign = (msg[0]>>4) & 1;
unsigned char ysign = (msg[0]>>5) & 1;
unsigned char always1 = (msg[0]>>3) & 1;
short dx = msg[1] - 256*xsign;
short dy = msg[2] - 256*ysign;
{
boost::mutex::scoped_lock lock(mutex);
x += abs(dx);
y += dy;
}
}
}
};
Et c'est là que je tente d'accéder à des variables x et y de la souris:
{
boost::mutex::scoped_lock leftlock(leftMouse.mutex);
xLeft = leftMouse.x;
yLeft = leftMouse.y;
}
{
boost::mutex::scoped_lock rightlock(rightMouse.mutex);
xRight = rightMouse.x;
yRight = rightMouse.y;
}
cout << xRight << " " << yRight << endl; //this always prints 0 0
Pourriez-vous s'il vous plaît poster un code pour voir exactement comment cela ne fonctionne pas? –