在 Qt 5.5 中持续检查主循环
Continuous check in the main loop in Qt 5.5
我有一个在线性路径上移动的设备,基本上是 linear actuator。当设备到达物理端时,它会碰到一个限制触点,该触点会向我的软件发送信号。我将需要不断检查此信号是否在线。但是我在 Qt5.5 中实现这个逻辑时遇到困难。
我一直在阅读 QtConcurrent
,这似乎是一个可行的解决方案,但在试驾后我发现如果没有某种 while(true)
我无法解决我的问题环形。然而,实施 while(true)
循环似乎会减慢我代码中的所有其他内容,因此使该解决方案完全无用。
我会 post 编写代码,但鉴于它使用的库和设备的命名法非常特殊,我会免除你的痛苦,但如果有人能指导我阅读类似的内容,我会将不胜感激。我宁愿避开 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()
确实需要很多时间,那么将此 class 移出主线程会有所帮助。
我有一个在线性路径上移动的设备,基本上是 linear actuator。当设备到达物理端时,它会碰到一个限制触点,该触点会向我的软件发送信号。我将需要不断检查此信号是否在线。但是我在 Qt5.5 中实现这个逻辑时遇到困难。
我一直在阅读 QtConcurrent
,这似乎是一个可行的解决方案,但在试驾后我发现如果没有某种 while(true)
我无法解决我的问题环形。然而,实施 while(true)
循环似乎会减慢我代码中的所有其他内容,因此使该解决方案完全无用。
我会 post 编写代码,但鉴于它使用的库和设备的命名法非常特殊,我会免除你的痛苦,但如果有人能指导我阅读类似的内容,我会将不胜感激。我宁愿避开 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()
确实需要很多时间,那么将此 class 移出主线程会有所帮助。