树梅派硬件学习_多线程任务

本文介绍了如何在C++类中使用多线程,通过创建一个类,定义一个启动/停止线程的标志,将成员函数转换为静态函数来实现线程化。示例中展示了如何创建一个LED闪烁的线程函数,通过loop_start()启动线程,loop_stop()关闭线程,控制LED的开关状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值