树梅派硬件学习_多线程任务
Posted Leslie X徐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树梅派硬件学习_多线程任务相关的知识,希望对你有一定的参考价值。
C++类中的多线程编程
目标
需要将成员函数变成线程函数
步骤:
1.创建一个类
在类中定义一个开启关闭线程的flag
将要加入线程的成员函数定义为static静态函数
#include <thread>
class Myclass
{
bool flag=false;
public:
Myclass(){}
static void func(void* arg);
void start();
void stop();
};
2.定义线程执行函数
void Myclass::func(void* arg)
{
Myclass* myclass = static_cast<Myclass*>(arg);
while(myclass->flag == true){
//循环体
}
}
3.start函数开启线程,将当前的类this指针传进去
void Myclass::start()
{
this->flag = true;
std::thread th = std::thread(func,this);
th.detach();
}
4.stop函数关闭线程
void Myclass::stop()
{
this->flag = false;
}
实例
实现小灯闪烁的线程函数
头文件
#ifndef LED_LOOP_H
#define LED_LOOP_H
#include <QObject>
#include <thread>
#include "../include/LED.h"
class LED_Loop : public QObject
{
Q_OBJECT
private:
LED *led;
char ledpin;
bool loopFlag=false;
public:
explicit LED_Loop(QObject *parent = nullptr);
LED_Loop(char pin);
static void led_loop(void* arg);
void loop_start();
void loop_stop();
signals:
public slots:
};
#endif // LED_LOOP_H
定义
#include "led_loop.h"
LED_Loop::LED_Loop(QObject *parent) : QObject(parent)
{
}
LED_Loop::LED_Loop(char pin)
{
this->led = new LED (pin);
}
void LED_Loop::led_loop(void *arg)
{
LED_Loop* ledloop = static_cast<LED_Loop*>(arg);
while(ledloop->loopFlag==true){
ledloop->led->on();
delay(1000);
ledloop->led->off();
delay(1000);
}
return;
}
void LED_Loop::loop_start()
{
this->loopFlag = true;
std::thread th = std::thread(led_loop,this);
th.detach();
}
void LED_Loop::loop_stop()
{
this->loopFlag = false;
}
以上是关于树梅派硬件学习_多线程任务的主要内容,如果未能解决你的问题,请参考以下文章