Bonjour,
Je débute sur l'utilisation des threads en c++. J'ai fait un petit exemple pour illustrer ce que je souhaite faire :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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
Partager