单线程与计时器

[转]http://m18659257646.blog.163.com/blog/static/237824031201482913814505/
计时器:
setTimeout(conFun, 2000);
隔XXX毫秒后执行一次
setInterval(conFun, 1000);
每隔XXX毫秒后执行一次

timer = setInterval(function(){sport(attri);}, 50);
timer = setInterval("sport(attri)", 50);
timer = setInterval(sport, 50);
timer = setInterval(sport(attri), 50);
只执行一次,计时器不起作用了。

计时器清除:
timer = setTimeout(conFun, 2000);
clearTimeout(timer);

timer = setInterval(conFun, 1000);
clearInterval(timer);

单线程:
就是说同一时间只能做一件事,在单线程里设置计时器,运行代码时,仅仅是把计时器的代码添加到了运行队列等待执行,而不是执行代码,执行的时间有可能是延后,或者提前.

setInterval的引擎处理:
当队列中没有该定时器的其它代码实例时,才能将新的定时器代码添加到队列中.
由于线程的原因,可能会造成的问题:
1、某些间隔会被跳过
2、多个定时器的代码执行之间的间隔可能会比预期的小

JS的引擎是单线程,强制所有的异步事件排队等待执行.
setTimeout 和setInterval在执行异步代码的时候存在根本的不同:
如果一个计时器被阻塞而不能立即执行,那么它将延迟执行,直到下一次执行的时间点才被执行(即比期望的时间间隔要长);
如果setInterval中的回调函数的执行时间足够长,比指定的时间间隔长,她们将连续执行并且彼此之间没有时间间隔.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt提供了丰富的多线程编程支持,包括构造了一些基本的与平台无关的线程类、提交用户自定义事件的Thread-safe方式、多种线程间同步机制,如信号量、全局锁等。同时,Qt还提供了QTimer类,用于提供重复和单次定时器。下面是关于Qt多线程计时器的介绍和演示: 1. Qt多线程的使用方法 Qt中的多线程编程主要通过QThread类实现。使用QThread类的步骤如下: (1)创建一个继承自QThread的子类,并重写其run()函数,run()函数中编写子线程的代码逻辑。 (2)在主线程中创建子线程对象,并调用其start()函数启动子线程。 下面是一个简单的例子,演示了如何使用QThread类创建一个子线程: ```python from PyQt5.QtCore import QThread, pyqtSignal class MyThread(QThread): # 定义一个信号,用于在子线程中发送消息给主线程 signal = pyqtSignal(str) def __init__(self, parent=None): super().__init__(parent) def run(self): # 子线程的代码逻辑 for i in range(5): self.signal.emit('当前进度:%d' % i) self.sleep(1) # 在主线程中创建子线程对象,并启动子线程 thread = MyThread() thread.signal.connect(lambda msg: print(msg)) thread.start() ``` 在上面的例子中,我们创建了一个继承自QThread的子类MyThread,并重写了其run()函数。在run()函数中,我们编写了子线程的代码逻辑,即每隔1秒钟向主线程发送一个消息。在主线程中,我们创建了子线程对象,并通过connect()函数将子线程的信号与一个lambda函数连接起来,当子线程发送信号时,lambda函数会被调用,输出消息。 2. QTimer的使用方法 QTimer类用于提供重复和单次定时器。使用QTimer类的步骤如下: (1)创建一个QTimer对象,并设置定时器的时间间隔。 (2)连接定时器的timeout()信号到一个槽函数中,槽函数中编写定时器触发时的代码逻辑。 (3)调用定时器的start()函数启动定时器。 下面是一个简单的例子,演示了如何使用QTimer类创建一个定时器: ```python from PyQt5.QtCore import QTimer # 创建一个QTimer对象,并设置定时器的时间间隔为1秒 timer = QTimer() timer.setInterval(1000) # 连接定时器的timeout()信号到一个槽函数中 def on_timeout(): print('定时器触发了') timer.timeout.connect(on_timeout) # 启动定时器 timer.start() ``` 在上面的例子中,我们创建了一个QTimer对象,并设置了定时器的时间间隔为1秒。然后,我们连接了定时器的timeout()信号到一个槽函数on_timeout()中,当定时器触发时,槽函数中的代码逻辑会被执行。最后,我们调用了定时器的start()函数启动定时器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值