• C++多线程chap1多线程入门5


    这里,只是记录自己的学习笔记。

    顺便和大家分享多线程的基础知识。然后从入门到实战。有代码。

    知识点来源:

    https://edu.51cto.com/course/26869.html



    用一个线程的基类,来实现线程封装



     1 #include <thread>
     2 #include <iostream>
     3 #include <string>
     4 
     5 //Linux  -lpthread
     6 
     7 using namespace std;
     8 
     9 //用类来管理线程的参数生命周期
    10 class MyThread {
    11 public:
    12     
    13     //入口线程函数
    14     void Main() {
    15         cout << "Mythread Main " << name << ":" << age << endl;
    16     }
    17     
    18     string name = "";
    19     int age = 100;
    20 };
    21 
    22 
    23 
    24 //用一个线程的基类,来实现线程封装
    25 class XThread {
    26 public:
    27     virtual void Start() {
    28         is_exit_ = false;
    29         //如果子类想传入不同的参数,可以重载Start方法
    30         th_ = std::thread(&XThread::Main, this);
    31     }
    32 
    33     virtual void Stop() {
    34         is_exit_ = true;
    35         Wait();
    36     }
    37 
    38     virtual void Wait() {
    39         if (th_.joinable()) {
    40             th_.join();
    41         }
    42     }
    43 
    44     bool is_exit() { return is_exit_; }
    45 
    46 private:
    47     virtual void Main() = 0;
    48     std::thread th_;
    49     bool is_exit_ = false;
    50 };
    51 
    52 class TestXThread :public XThread {
    53 public:
    54     void Main() override {
    55         cout << "testXThread Main begin..ID:"<<this_thread::get_id() << endl;
    56 
    57         while (!is_exit()) {
    58 
    59             this_thread::sleep_for(100ms);
    60             cout << "." << flush;
    61         }
    62         cout <<endl<< "testXThread Main End..ID:" <<this_thread::get_id()<< endl;
    63     }
    64 
    65     string name;
    66 };
    67 
    68 
    69 
    70 int main(int argc, char* argv[]) {
    71 
    72     //// 通过传递对象的成员函数来启动线程
    73     //MyThread myth;
    74     //myth.name = "test name 001";
    75     //myth.age = 20;
    76     ////参数1:成员函数的指针
    77     ////参数2:当前对象的地址
    78     //thread th(&MyThread::Main, &myth);
    79     //th.join();
    80 
    81 
    82 
    83     //编写线程基类
    84     TestXThread testth;
    85     testth.name = "TestXThread name";
    86     //start是显示,各个继承的子类,可以根据自己需要(比如,想传入不同的参数)去重载Start方法。
    87     testth.Start();
    88 
    89     this_thread::sleep_for(3s);
    90 
    91     testth.Stop();
    92 
    93     testth.Wait();
    94     getchar();
    95 
    96 
    97     return 0;
    98 }

     

     

    作者:小乌龟
    【转载请注明出处,欢迎转载】 希望这篇文章能帮到你

     

  • 相关阅读:
    jmeter(十八)属性和变量
    jmeter(十七)逻辑控制器
    jmeter(九)分布式测试
    jmeter(八)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
    jmeter(七)函数
    jmeter(六)关联
    jmeter(五)集合点
    jmeter(四)检查点
    jmeter(三)参数传递
    jmeter(二)元件的作用域与执行顺序
  • 原文地址:https://www.cnblogs.com/music-liang/p/15584284.html
Copyright © 2020-2023  润新知