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