3

阿木币

0

精华

183 小时

在线时间

技术大V

Rank: 4

发表于 2020-12-31 10:24:43 3428 浏览 0 回复

[入门教程] C++多线程-实现示例

需求:在ROS中,通过捕捉按键输入完成飞机的模式切换,该方式比较适合多机一键起飞或者其他模式切换操作。
简单说明:采用的是C++标准库提供的cin函数,但是这种方式为阻塞等待键盘按下,所以需要采用多线程或者多进程的方式,又采用了的是共享变量(标志位)的想法,故在一个进程中采用多线程即可。下面的示例给出一个简单的实现模板。在ROS中可以直接编译执行,在单C++函数中,需要在g++ -lpthread完成编译。join的作用为主函数运行结束后,子线程仍然可以一直运行,而不是一起结束。

  1. #include <iostream>

  2. #include <thread>



  3. int count = 0;



  4. void thr_fun1(void)

  5. {

  6.     while(1)

  7.     {

  8.         if(count == 1)

  9.         {

  10.             std::cout<<"here!"<<std::endl;

  11.         }

  12.     }

  13. }



  14. int main(int argc,char** argv)

  15. {

  16.     std::string str;

  17.     std::thread t1(thr_fun1);

  18.    // t1.join();

  19.     while(1)

  20.     {

  21.         std::cin>>str;

  22.         if(str=="arm")

  23.         {

  24.             std::cout<<"quadrotor armed!"<<std::endl;

  25.             count = 1;

  26.         }

  27.         else

  28.         {

  29.             count = 0;

  30.             std::cout<<"not the armed"<<std::endl;

  31.         }

  32.         

  33.     }

  34.     return 1;

  35. }
复制代码




评分

参与人数 1阿木币 +2 收起 理由
amov_msq + 2

查看全部评分


扫一扫浏览分享
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表