Qt定时器互关问题

DIE654456 2010-11-27 12:37:09

学习Qt有一段时间了,基本都是帮人解决问题,但是自己的问题也没解决好。

假设两个定时器QTimer,设为A、B,连接timeout信号到插槽SlotA、SlotB。

SlotA的主要任务是打印A字符串
void SlotA
{
///....暂时省略
static int aCount = 0 ;
qDebug( "This is SlotA %d" , aCount++ );
////...暂时省略
}

SlotB的主要任务是打印B字符串
void SlotB
{
///....暂时省略
static int bCount = 0;
qDebug( "This is SlotB %d" , bCount++ );
////...暂时省略
}

A和B的timeout时间设为2000ms,而且A比B先开始,
A.start( 2000 );
B.start( 2000 );



问题1如下:

SlotA的主要任务是打印A字符串
void SlotA
{
///....暂时省略
static int aCount = 0 ;
qDebug( "This is SlotA %d" , aCount++ );
if( aCount > 100 )
B.stop();
}

SlotB的主要任务是打印B字符串
void SlotB
{
///....暂时省略
static int bCount = 0;
qDebug( "This is SlotB %d" , bCount++ );
if( bCount >100 )
A.stop();
}
A和B的timeout时间设为2000ms,而且A比B先开始,
A.start( 2000 );
B.start( 2000 );

A和B的定时器事件会形成队列执行,执行到一定程序导致A、B停止。
但是最后的输出结果是怎么样呢?



问题2如下:

SlotA的主要任务是打印A字符串
void SlotA
{
///....暂时省略,但是可以肯定,这个操作会操过2秒
static int aCount = 0 ;
qDebug( "This is SlotA %d" , aCount++ );
if( aCount > 100 )
B.stop();
}

SlotB的主要任务是打印B字符串
void SlotB
{
///....暂时省略,但是可以肯定,这个操作会操过2秒
static int bCount = 0;
qDebug( "This is SlotB %d" , bCount++ );
if( bCount >100 )
A.stop();
}
A和B的timeout时间设为2000ms,而且A比B先开始,
A.start( 2000 );
B.start( 2000 );

A和B的定时器事件会形成队列执行,执行到一定程序导致A、B停止。
但是最后的输出结果是怎么样呢?

...全文
230 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DIE654456 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbzhang800 的回复:]
这个问题没什么意义,定时器本身就是不准确的。你定时2000ms,它只能保证timeout信号在2000ms内不会发出,至于是4000ms,40000ms,还是400000ms以后发生,不受Qt控制

1. 你这儿关注A、B谁先谁后没有多大意义。
2. 单线程程序中没有谁能打断你在执行的代码。事件必须回到事件循环才被派发。
[/Quote]

这个问题是抛钻引玉,其实我想听听各位对于Qt事件处理过程的见解。谢谢!
dbzhang800 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 die654456 的回复:]

这个问题是抛钻引玉,其实我想听听各位对于Qt事件处理过程的见解。谢谢!
[/Quote]
这个问题太大,Qt中几乎时刻都在和事件系统打交道

* http://hi.baidu.com/cyclone/blog/item/fe6ab3de0e9f2155ccbf1aea.html

信号槽躲不过事件系统

键盘鼠标等离不开事件系统

...
车太靓 2010-11-27
  • 打赏
  • 举报
回复
搬个板凳学习!
dbzhang800 2010-11-27
  • 打赏
  • 举报
回复
这个问题没什么意义,定时器本身就是不准确的。你定时2000ms,它只能保证timeout信号在2000ms内不会发出,至于是4000ms,40000ms,还是400000ms以后发生,不受Qt控制

1. 你这儿关注A、B谁先谁后没有多大意义。
2. 单线程程序中没有谁能打断你在执行的代码。事件必须回到事件循环才被派发。

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧