在编程中,顺序执行是常见的模式,但是对cpu的利用率不是很高,采用线程池,又太麻烦了,原因是还得不断地把任务拆分,扫描返回值。
如果 初始化n个类的时候,传递数据自身即可异步计算,那么是一个比较好的策略。
因此,我尝试在 类中开启一个线程
c++代码
#include <iostream>
#include <thread>
#include <chrono>
class threadrunclass {
public:
threadrunclass() : log_num(0), running(true) {}
void thread_run_fuc() {
while (running) {
std::this_thread::sleep_for(std::chrono::milliseconds(20));
log_num++;
}
}
int get_log_num() const {
return log_num;
}
void start_thread() {
std::thread th(&threadrunclass::thread_run_fuc, this);
th.detach();
}
void stop_thread() {
running = false;
}
~threadrunclass() {
stop_thread();
}
private:
int log_num;
bool running;
};
class test_class{
public:
threadrunclass obj = threadrunclass();
test_class() {
obj.start_thread();
}
int get_data_fuc(){
return obj.get_log_num();
}
};
int main(){
test_class testobj = test_class();
for (int i = 0; i < 5; i++) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::cout << "tts: " << testobj.get_data_fuc() << std::endl;
}
std::cout<<"get_curr+num "<<testobj.get_data_fuc()<<std::endl;
}
// int main() {
// threadrunclass myObject;
// myObject.start_thread();
// // 测试代码:每隔1秒获取一次log_num的值,共获取5次
// for (int i = 0; i < 5; i++) {
// std::this_thread::sleep_for(std::chrono::milliseconds(200));
// std::cout << "log_num: " << myObject.get_log_num() << std::endl;
// }
// myObject.stop_thread();
// return 0;
// }
模式的适用场景: 1.通讯场景 2.耗时计算