如何使用共享变量

时间:2017-10-11 14:40:05

标签: multithreading qt qthread shared-variable

我想知道您对我如何编码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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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