加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在Qt中计时事件的最佳方法

发布时间:2020-12-16 09:57:59 所属栏目:百科 来源:网络整理
导读:我正在Qt / c中编写一个软件,通过串口与arduino和其他电子设备进行通信. 我需要启动一系列事件,以不同的时序调用不同的插槽,如下所示: 启动电机1 20秒 10秒后启动电机2 停止电机1 更改电机1速度 启动电机1 30秒 我尝试过使用QTimer :: singleShot,但它只适
我正在Qt / c中编写一个软件,通过串口与arduino和其他电子设备进行通信.

我需要启动一系列事件,以不同的时序调用不同的插槽,如下所示:

>启动电机1 20秒
> 10秒后启动电机2
>停止电机1
>更改电机1速度
>启动电机1 30秒

我尝试过使用QTimer :: singleShot,但它只适用于没有参数的插槽,我需要不时设置电机速度等参数.

现在我正在使用面向currentTime do dieTime的延迟功能,但跟踪所有设备的时序很复杂.

这样做的最佳解决方案是什么?
建议?

解决方法

如果使用带有Functor(函数对象)的 overloaded method,则可以使用静态QTimer单次拍摄功能.这将允许您捕获所需的变量;哪个电机,速度,动作等.如果你不熟悉Functors,你可以阅读它们 here.

或者,由于问题没有提供代码示例,我们假设您已经编写了启动和停止电机的功能.对于更直接的方法,with C++11,你可以这样做:

StartMotor(1);

// Stop in 20 seconds
QTimer* p1 = new QTimer;
connect(p1,&QTimer::timeout,[=]{
    StopMotor(1);
    p1->deleteLater(); // clean up
});
p1->start(1000 * 20); // trigger in 20 seconds

// After 10 seconds,start motor 2

QTimer* p2 = new QTimer;
connect(p2,[=]{
    StartMotor(2);

    // And Stop Motor 1
    StopMotor(1);

    p2->deleteLater(); // clean up
});
p2->start(1000 * 10); // trigger in 10 seconds

……对于每个定时动作等等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读