转载:C++11: 线程的暂停和继续和停止_hai7song的专栏-CSDN博客_c++ 线程暂停
重点:
通过设置一个类,类里面加入线程,然后采用标志位来控线程的暂停、恢复和停止。
有点意思!
#include <future>
#include <initializer_list>
#include <type_traits>
#include <ctime>
#include <atomic>
using namespace std;
class ThreadTest
{
public:
ThreadTest()=default;
~ThreadTest() = default;
public:
void Run();
void Stop();
void Pause(); //暂停
void Resume();//恢复
private:
condition_variable m_cv;
mutex mu;
bool m_isStop{false};
bool m_isPause{ false };
atomic<int> num = 0;
};
void ThreadTest::Run()
{
thread t([&] {
while (true)
{
if (!m_isStop)
{
cout << "current process is" << num++ << endl;
this_thread::sleep_for(chrono::seconds(1));
unique_lock<mutex> lock(mu);
m_cv.wait(lock, [this] {return !m_isPause; });
}
}
});
t.detach();
}
void ThreadTest::Stop()
{
m_isStop = true;
}
void ThreadTest::Pause()
{
unique_lock<mutex> lock(mu);
m_isPause = true;
m_cv.notify_one();
}
void ThreadTest::Resume()
{
unique_lock<mutex> lock(mu);
m_isPause = false;
m_cv.notify_one();
}
int main()
{
ThreadTest t;
t.Run();
int ch;
while ((ch=getchar())!='q')
{
switch (ch)
{
case 'p':
t.Pause();
break;
case 'r':
t.Resume();
break;
case 's':
t.Stop();
break;
default:
break;
}
}
return 0;
}