本文主要是介绍c++ cpp 在类中执行线程 进行恒定计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在编程中,顺序执行是常见的模式,但是对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.耗时计算
这篇关于c++ cpp 在类中执行线程 进行恒定计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!