Stopper la fonction exécutée par un thread avec un attribut
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:
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 ?