javascript计时器原理

cassia_ 发布于 2015/07/07 09:23
阅读 113
收藏 0

昨天在w3c上学javascript的计时器的时候,写了个计时程序。

源码很简单:

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script>
	function show()
	{
		document.getElementById('a').value=new Number(document.getElementById('a').value) + 1
		t=setTimeout("show()",1000);
	}
	function stop()
	{
		clearTimeout(t);
	}
</script>
</head>
<body>
<input type="button" value="开始计时" onclick="show()"/>
<input type="button" value="暂停计时" onclick="stop()"/>
<input id="a" type="text" value="1" readonly="true"/>
</body>
</html>

运行的时候,我突然发现,多次点击开始计时的话,每点一次,就会多一个计时器,时间增加的越来越快。

原以为是启动了多个线程,于是看了看任务管理器:

无论点多少下,线程总数始终不变。查了一下说javascript是单线程的,那么问题来了。。。它是用什么原理计时当得?



加载中
0
张亦俊
张亦俊

linux不清楚,windows内建一套消息体系,有计时器消息的。

貌似写的不够清楚,具体讲一下,计时器这玩意一般是操作系统把硬件计时器翻个几倍来实现的。硬件计时器是发中断的,凌驾在进程/线程之上。你可以把计时器理解为一种能与线程平起平坐的玩意,所以增加计时器并不会增加线程。

0
开源小姐
开源小姐
t换成window.t,show加个clearTimeout
返回顶部
顶部