Bonjour à tous,

je viens de débuter la gestion de threads en C++, et je tente d'en stopper un. Je sais que la librairie ne permet pas de le faire et pourquoi. J'ai donc recours au code suivant minimal.

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
 
#include <iostream>
#include <chrono>
#include <thread>
 
using namespace std;
 
std::chrono::seconds sec(1);
 
class Runnable
{
    public:
        bool stop;
        Runnable(bool b = false) : stop(b) {}
 
        void operator()()
        {
            while(! stop)
            {
                cout << "Hello you" << endl;
                this_thread::sleep_for(sec);
            }
 
            cout << "Thread stopped" << endl;
        }
};
 
int main()
{
    Runnable r;
    thread t(r);
 
    bool stop = false;
    while(! stop)
    {
        cout << "Press anything to stop" << endl;
        char c;
        cin >> c;
        r.stop = true;
        this_thread::sleep_for(sec);
        stop = true;
    }
}
Néanmoins, quand je presse une touche, le threads qui affiche "Hello you" ne s'arrête pas, je ne vois pas "Thread stopped".

Qu'est-ce que je fais de mal ?