Interaction entre thread et une classe
Bonjour,
Je débute sur l'utilisation des threads en c++. J'ai fait un petit exemple pour illustrer ce que je souhaite faire :
Code:
1 2 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#include <thread>
#include <iostream>
#include <chrono>
#include <future>
class A
{
public:
A()
{
futureExit = exitSignal.get_future();
}
void launch()
{
m_thread = std::thread(&A::doWork, futureExit, std::ref(this));
std::this_thread::sleep_for(std::chrono::seconds(30));
exitSignal.set_value();
m_thread.join();
}
void function1()
{
std::cout << "function1" << std::endl;
my_variable++;
}
static void doWork(std::future<void> futureExit, A &oA)
{
std::cout << "doWork Start" << std::endl;
while (futureExit.wait_for(std::chrono::milliseconds(1)) == std::future_status::timeout)
{
std::cout << "Work..." << std::endl;
oA.function1();
oA.my_variable2++;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
std::cout << "doWork End" << std::endl;
}
int my_variable2;
private:
std::thread m_thread;
std::promise<void> exitSignal;
std::future<void> futureExit;
int my_variable;
};
int main()
{
A oA;
oA.launch();
return 0;
} |
J'ai une thread qui travaille et qui a besoin de modifier des variables ou d'appeler des fonctions de la classe A. Avant je n'utilisai pas std::ref et je me suis rendu compte que je travaillai sur une copie de la classe A. Donc les changements dans le thread n'étaient pas visible dans la classe A.
Depuis que j'utilise std::ref, je n'arrive pas à compiler car j'utilise une fonction supprimée.
Avez-vous des conseilles ou des idées d'amélioration du code.
Merci d'avance
PS : Je suis en C++11