作者:猪宝宝的事 | 来源:互联网 | 2023-05-18 22:45
QQ空间:http:user.qzone.qq.com3536241blog1325463824此网页的源代码怎么找不到“定时器原型”这几个字,要找到这几个字,在哪里找?
QQ空间:
http://user.qzone.qq.com/3536241/blog/1325463824
此网页的源代码怎么找不到“定时器原型”这几个字,要找到这几个字,在哪里找?
6 个解决方案
"title":"定时器原型",
右键,看源代码不是有吗
假如你曾经开发过 Microsoft Win32 的应用程序,你知道 SetTimer 函数是 API 之一,通过这个函数可以指定的一个窗口接收到来自系统时间周期的 WM_TIMER 消息。用这个方法遇到的第一个问题是你需要一个窗口去接收消息,所以你不能用在控制台应用程序中。另外,基于消息的实现并不是非常精确,假如你的应用程序正在处理其它消息,情况有可能更糟糕。
相对基于 Win32 的定时器来说, .NET 中一个很重要的改进就是创建不同的线程,该线程阻塞指定的时间,然后通知一个回调函数。这里的定时器不需要 Microsoft 的消息系统,所以这样就更精确,而且还能用于控制台应用程序中。以下代码显示了这个技术的一种实现:
class MainApp
{
static void Main()
{
MyTimer myTimer = new MyTimer(2000);
Console.ReadLine();
}
}
class MyTimer
{
int m_period;
public MyTimer(int period)
{
Thread thread;
m_period = period;
thread = new Thread(new ThreadStart(TimerThread));
thread.Start();
}
void TimerThread()
{
Thread.Sleep(m_period);
OnTimer();
}
void OnTimer()
{
Console.WriteLine("OnTimer");
}
}
这个代码一般用于 Wn32 应用中。每个定时器创建独立的线程,并且等待指定的时间,然后呼叫回调函数。犹如你看到的那样,这个实现的成本会非常高。如果你的应用程序使用了多个定时器,相对的线程数量也会随着使用定时器的数量而增长。
现在我们有 .NET 提供的线程池,我们可以从池中改变请求的等待函数,这样就十分有效,而且会提升系统的性能。我们会遇到两个问题:
n 假如线程池已满(所有的线程都在运行中),那么这个请求排到队列中等待,而且定时器不在精确。
n 假如创建了多个定时器,线程池会因为等待它们时间片失效而非常忙。
为了避免这些问题, .NET 框架的线程池提供了独立于时间的请求。用了这个函数,我们可以不用任何线程就可以拥有成千上万个定时器,一旦时间片失效,这时,线程池将会处理这些请求。
这些特色出现在两个不同的类中:
System.Threading.Timer
定时器的简单版本,它运行开发人员向线程池中的定期执行的程序指定一个代理( delegate ) .
System.Timers.Timer
System.Threading.Timer 的组件版本,允许开发人员把它拖放到一个窗口表单( form )中,可以把一个事件作为执行的函数。
这非常有助于理解上述两个类与另外一个称为 System.Windows.Forms.Timer .的类。这个类只是封装了 Win32 中消息机制的计数器,如果你不准备开发多线程应用,那么就可以用这个类。
在IE8、9中是按F12调出Developer Tools(或者从工具菜单中选取)
在FireFox中安装FireBug
在Chrome中,安装开发者工具
查看源代码看到的是请求页面的时候从网站获得的html数据。
无法反映ajax脚本对dom的修改变化。