0

我想知道您对我如何编写 QThread 的看法。

我的这部分代码用于处理 LED 显示屏的 PWM。

我的 QThread 的目的是在更改 QThread 中的值时尽可能顺利地工作,否则我可以在 LED 显示屏上看到值更改期间非常快的中断,例如当我使用 QMutex 时。

这就是我选择使用 SIGNAL / SLOT 方式的原因 当我需要根据时间或电阻值改变亮度时,我使用emit SIGNAL_FUNCTION (qint32 new_value)

使用我的方法是否存在使我的应用程序崩溃的风险?还有另一种更正确的方法来处理这种程序吗?

我在下面附上了我的代码。

#include "luminosite.h"

LUMINOSITE::LUMINOSITE(QObject *parent, qint32 P_PIN_LUMINOSITE) :
    QThread(parent)
{
    PIN_LUMINOSITE = P_PIN_LUMINOSITE;
    VALEUR = 1;
}

void LUMINOSITE::run()
{
    qint32 TICK = 0;

    while(true)
    {
        if (TICK == 0)
        {
            digitalWrite(PIN_LUMINOSITE, LOW);
        }
        else if (TICK == VALEUR)
        {
            digitalWrite(PIN_LUMINOSITE, HIGH);
        }
        TICK++;
        if (TICK == 33)
        {
            TICK = 0;
        }
        delayMicroseconds(1);
    }
}

void LUMINOSITE::CHANGEMENT_VALEUR(qint32 P_VALEUR) // SLOT
{
    VALEUR = P_VALEUR;
}
4

1 回答 1

0

如果您的问题只是“SIGNAL/SLOT 它们是线程安全的吗?”,请阅读:http: //doc.qt.io/qt-5/threads-qobject.html#signals-and-slots-across-threads

它仅取决于您选择的连接类型。

您需要在 Qt::QueuedConnection 和 Qt::BlockingQueuedConnection 之间进行选择

于 2017-10-11T14:46:51.360 回答