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;
}
本文标签: 线程
版权声明:本文标题:C++ :线程的暂停、恢复和停止 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727893024a1136506.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论