4

我有一个在线性路径上移动的设备,基本上是一个线性致动器。当设备到达物理端时,它会碰到一个限制触点,该触点会向我的软件发送信号。我将需要不断检查此信号是否在线。但是我在 Qt5.5 中实现这个逻辑时遇到了困难。

我一直在阅读,这似乎是一个可行的解决方案,但在试驾中实施后,我发现如果没有某种循环QtConcurrent,我无法解决我的问题。while(true)然而,实现一个while(true)循环似乎会减慢我代码上的所有其他内容,因此使这个解决方案完全无用。

我会发布代码,但考虑到它使用的库和设备命名法是非常特定的利基市场,我不会让你痛苦,但如果有人能指导我阅读类似的东西,我将不胜感激。我宁愿避开QtThread并基本上手动设置线程,因为此时我对使用它们感到不舒服,而且我对这个项目有时间限制,所以最好不要做太多实验。

tldr:我需要以某种方式将一些代码放在程序的主循环中,以检查布尔值的变化。通过以太网通信的设备将所述变化发送到外部的程序。

4

1 回答 1

2
class Checker : public QObject
{
    Q_OBJECT
public:
    Checker(void)
    {
        timer.setInterval(100);// give it a interval, like 100ms?
        connect(timer, SIGNAL(timeout()), this, SLOT(checkHW()));
    }
    void start(void)
    {
        timer.start();// although you can start the timer in the constructor 
                      // but I guess you want to start it later, after HW is   
                      // ready.
    }
private Q_SLOTS:
    void checkHW()
    {
        bool hit = false;
        // check the hardware here
        if(hit){
            emit hitEnd();// tell others about the event
        }
    }
signals:
    void hitEnd(void);
private:
    QTimer timer;
}

如果检查硬件开关不需要太多时间,那么你真的不需要另一个线程。但是,如果checkHW()确实需要很多时间,那么将此类移出主线程会有所帮助。

于 2015-08-16T20:31:30.710 回答