Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt 5.5中主回路的连续检查_C++_Qt_Peripherals - Fatal编程技术网

C++ Qt 5.5中主回路的连续检查

C++ Qt 5.5中主回路的连续检查,c++,qt,peripherals,C++,Qt,Peripherals,我有一个在线性路径上移动的装置,基本上是一个。当设备到达物理端时,它会碰到一个极限触点,该触点会向我的软件发送一个信号。我需要不断检查这个信号是否在线。但是我在Qt5.5中实现这个逻辑时遇到了困难 我一直在阅读QtConcurrent,这似乎是一个可行的解决方案,但在试驾中实施后,我发现如果没有某种while(true)循环,我就无法解决问题。然而,实现while(true)循环似乎会减慢代码中的其他内容,因此使此解决方案完全无用 我会发布代码,但考虑到它使用的库和设备的命名是一个非常特定的利基

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

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

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

tldr:我需要在程序的主循环中放入一些代码,以检查布尔值的变化。所述改变由通过以太网进行通信的设备从外部发送到程序

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()
确实需要很多时间,那么将此类移出主线程会有所帮助。

您的回答不仅完全解决了我的问题,而且我现在已经在Qt中学习了一个全新的范例。非常感谢你。(看来我需要15名代表投票支持)