当需要某个功能执行在另一线程时,可以抄去打底
// class_do_something.h
#ifndef __CLASS_DO_SOMETHING_H__
#define __CLASS_DO_SOMETHING_H__
#include <thread>
#include <mutex>
#include <condition_variable>
class DoSomething {
public:
int Run();
void EndProcess();
void Init();
private:
std::thread thread_id;
std::mutex do_mutex;
std::condition_variable condition;
bool run_enable;
};
#endif // __CLASS_DO_SOMETHING_H__
// class_do_something.cpp
#include "class_do_something.h"
int DoSomething::Run() {
while (run_enable)
{
std::unique_lock<std::mutex> lock(do_mutex);
if (check()) { // 换成自己的判断条件,例如队列不为空
// do something
} else {
condition.wait(lock);
}
}
};
void DoSomething::EndProcess() {
std::unique_lock<std::mutex> lock(do_mutex);
run_enable = false;
condition.notify_one();
}
void DoSomething::Init()
{
run_enable = true;
thread_id = std::thread(&DoSomething::Run, this);
thread_id.detach(); // 分离线程,使其成为后台线程
}
使用时仅需创建该类的实例,并Init,就可以使用新线程。不用的时候调用EndProcess就行。