클래스에서 optimize() 무한루프 돌리는 스레드 하나 만들어놓고

외부에서는 startOptimizationThread() 호출해서 시작하고

끝내고싶을 때 stopOptimizationThread() 하는 코드임

bool thread_stop_requested_; 이거랑 mutex 가지고 스레드 끝낼지말지 결정하거든

이렇게 짜는거 맞냐? 효율적인 방법 있냐?



class Optimizer{

public: void startOptimizationThread(); void stopOptimizationThread();...


private:<!--EndFragment--> void threadEnter(); void optimize();
std::thread optimization_thread_;

std::mutex thread_stop_mutex_;

bool thread_stop_requested_;...};



void Optimizer::startOptimizationThread(){ thread_stop_requested_ = false; optimization_thread_ = std::thread( std::bind(&Optimizer::threadEnter, this) );}
void Optimizer::stopOptimizationThread(){ thread_stop_mutex_.lock(); thread_stop_requested_ = true; thread_stop_mutex_.unlock();
optimization_thread_.join();}
void Optimizer::threadEnter(){ optimize();}
void Optimizer::optimize(){ while (true) { // test thread stop thread_stop_mutex_.lock(); if (thread_stop_requested_) return; thread_stop_mutex_.unlock();
// TODO: optimize }}


<!--EndFragment-->