admin管理员组

文章数量:1582034

转载: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;
}

本文标签: 线程