单次定时器的坑

单次定时器的坑

setSingleShot 函数设置qtimer 为单次触发。

这种情况,实际测试中如果不将定时器 kill 。还是会有多个定时器存在。
m_pTimer = new QTimer(this);
m_pTimer->setSingleShot(true);
m_pTimer->start(20);
connect(m_pTimer, &QTimer::timeout, this, = {
QByteArray dataHex = Serial->serial->readAll().toHex();
QString data;
int s = dataHex.size();
for (int i = 0; i < dataHex.size(); i++)
{
data += dataHex.at(i);
if (i == 19)
{
if (dataHex.at(i) == ‘0’)
{
ui.textBrowser_info->insertPlainText(“握手成功!\n”);
}
else
{
ui.textBrowser_info->insertPlainText(“握手失败!\n”);
}
}
}
ui.textBrowser_info->insertPlainText(data);
ui.textBrowser_info->insertPlainText("\n");
m_pTimer->stop();//此位置设断点 定时器会结束结束
dataHex.clear();
});

使用 singleShot 静态函数 没有这个问题

QTimer::singleShot(20, this, = {
QByteArray dataHex = Serial->serial->readAll().toHex();
QString data;
int s = dataHex.size();
for (int i = 0; i < dataHex.size(); i++)
{
data += dataHex.at(i);
if (i == 19)
{
if (dataHex.at(i) == ‘0’)
{
ui.textBrowser_info->insertPlainText(“握手成功!\n”);
}
else
{
ui.textBrowser_info->insertPlainText(“握手失败!\n”);
}
}
}
ui.textBrowser_info->insertPlainText(data);
ui.textBrowser_info->insertPlainText("\n");
dataHex.clear();
});
经过测试,单次定时没有多次停止的问题。特此记录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
POSIX标准提供了两种类型的定时器单次定时器和周期性定时器单次定时器在到达指定时间后只触发一次,而周期性定时器会在指定时间间隔内重复触发。 对于单次定时器,可以使用timer_settime()函数来设置定时器的触发时间和行为。该函数的参数new_value中的it_value字段指定了定时器的初始触发时间,当定时器到达指定时间后,会触发一个信号。如果不感兴趣定时器的前一设置,可以将参数old_value设为NULL。 对于周期性定时器,可以使用timer_settime()函数来设置定时器的触发时间和行为。该函数的参数new_value中的it_value字段指定了定时器的初始触发时间,而it_interval字段指定了定时器的重复触发时间间隔。当定时器到达指定时间后,会触发一个信号,并在每个重复触发时间间隔内重复触发。 需要注意的是,定时器的创建和删除可以使用timer_create()和timer_delete()函数来完成。这些函数可以创建和删除POSIX预处理的定时器。 综上所述,POSIX标准提供了timer_settime()函数来设置和装备或解除单次定时器和周期性定时器,而timer_create()和timer_delete()函数用于创建和删除定时器。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [OpenHarmony系统中POSIX定时器的使用方法](https://blog.csdn.net/isoftstone_HOS/article/details/128452491)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Unix/Linux编程:POSIX间隔式定时器](https://blog.csdn.net/zhizhengguan/article/details/117363401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [定时器 POSIX Timer定时器setitimer定时器](https://blog.csdn.net/qq_42632460/article/details/130393240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值