C#事件与循环
很难理解事件是如何真正起作用的 假设我有一个循环,检查我是否每毫秒按一次键盘上的字母“a”。 这与设置相同的事件有何不同,它不需要一直进行检查,以查看我是否按下了键来触发事件吗? 它必须时刻注意,这会像循环一样造成开销,对吗?或者它是休眠的,这使我不知道它是如何被触发的,没有不断地检查 事件如何真正起作用 我猜处理键盘事件的代码处于休眠状态。当硬件事件发生时,CPU加载带有键盘事件处理程序地址的寄存器并运行 没有投票 事件如何真正起作用 我猜处理键盘事件的代码处于休眠状态。当硬件事件发生时,CPU加载带有键盘事件处理程序地址的寄存器并运行 没有投票 事件如何真正起作用 我猜处理键盘事件的代码处于休眠状态。当硬件事件发生时,CPU加载带有键盘事件处理程序地址的寄存器并运行 没有投票 事件如何真正起作用 我猜处理键盘事件的代码处于休眠状态。当硬件事件发生时,CPU加载带有键盘事件处理程序地址的寄存器并运行C#事件与循环,c#,.net,events,C#,.net,Events,很难理解事件是如何真正起作用的 假设我有一个循环,检查我是否每毫秒按一次键盘上的字母“a”。 这与设置相同的事件有何不同,它不需要一直进行检查,以查看我是否按下了键来触发事件吗? 它必须时刻注意,这会像循环一样造成开销,对吗?或者它是休眠的,这使我不知道它是如何被触发的,没有不断地检查 事件如何真正起作用 我猜处理键盘事件的代码处于休眠状态。当硬件事件发生时,CPU加载带有键盘事件处理程序地址的寄存器并运行 没有投票 事件如何真正起作用 我猜处理键盘事件的代码处于休眠状态。当硬件事件发生时,CP
没有轮询。应用程序中不能有很多循环检查多个条件并异步工作。
使用events OperatingSystem侦听所有消息(事件)(它是操作系统中的一个真实循环),然后将您订阅的事件与应用程序一起传递。应用程序中不能有很多循环检查多个条件并异步工作。
使用events OperatingSystem侦听所有消息(事件)(它是操作系统中的一个真实循环),然后将您订阅的事件与应用程序一起传递。应用程序中不能有很多循环检查多个条件并异步工作。
使用events OperatingSystem侦听所有消息(事件)(它是操作系统中的一个真实循环),然后将您订阅的事件与应用程序一起传递。应用程序中不能有很多循环检查多个条件并异步工作。
使用事件操作系统侦听所有消息(事件)(它是操作系统中的一个真实循环),然后将您订阅的事件与应用程序一起传递。事件和循环(称为轮询)的区别在于性能和资源消耗 在循环情况下(轮询),CPU始终处于活动状态,检查键盘。这需要消耗很多能量。如果许多程序想知道按键的情况并做同样的事情,那么整个电脑都在忙着检查按键是否被按下 还要注意:您只需要每隔毫秒检查一次按键。但是你怎么知道一毫秒已经过去了?这将导致如下循环:
long timeBefore = timer();
long timeAfter = timeBefore;
while (timeAfter - time < 1000) // 1000 us = 1 ms
{
timeAfter = timer();
}
long-timeBefore=timer();
长时间之后=时间之前;
而(timeAfter-time<1000)//1000 us=1毫秒
{
timeAfter=timer();
}
拥有这样一个循环会消耗100%的CPU时间(1个内核)
人们很早就认识到了这种情况,按键和计时器的滴答声都是由硬件来处理的。硬件触发一个中断。中断由操作系统处理并转换为事件。这适用于按键和定时器滴答声(以及其他事情)
这样,您的程序可以进入睡眠状态,CPU可以执行其他操作,操作系统将在您指定的事件发生时唤醒您的程序
请注意,这是一个简化的描述。细节要复杂得多。如果您想了解Windows的详细信息,请阅读(特别是第3章)。但是请注意,即使我第二次阅读这本书,我也没有完全理解它。事件和循环(称为轮询)的区别在于性能和资源消耗 在循环情况下(轮询),CPU始终处于活动状态,检查键盘。这需要消耗很多能量。如果许多程序想知道按键的情况并做同样的事情,那么整个电脑都在忙着检查按键是否被按下 还要注意:您只需要每隔毫秒检查一次按键。但是你怎么知道一毫秒已经过去了?这将导致如下循环:
long timeBefore = timer();
long timeAfter = timeBefore;
while (timeAfter - time < 1000) // 1000 us = 1 ms
{
timeAfter = timer();
}
long-timeBefore=timer();
长时间之后=时间之前;
而(timeAfter-time<1000)//1000 us=1毫秒
{
timeAfter=timer();
}
拥有这样一个循环会消耗100%的CPU时间(1个内核)
人们很早就认识到了这种情况,按键和计时器的滴答声都是由硬件来处理的。硬件触发一个中断。中断由操作系统处理并转换为事件。这适用于按键和定时器滴答声(以及其他事情)
这样,您的程序可以进入睡眠状态,CPU可以执行其他操作,操作系统将在您指定的事件发生时唤醒您的程序
请注意,这是一个简化的描述。细节要复杂得多。如果您想了解Windows的详细信息,请阅读(特别是第3章)。但是请注意,即使我第二次阅读这本书,我也没有完全理解它。事件和循环(称为轮询)的区别在于性能和资源消耗 在循环情况下(轮询),CPU始终处于活动状态,检查键盘。这需要消耗很多能量。如果许多程序想知道按键的情况并做同样的事情,那么整个电脑都在忙着检查按键是否被按下 还要注意:您只需要每隔毫秒检查一次按键。但是你怎么知道一毫秒已经过去了?这将导致如下循环:
long timeBefore = timer();
long timeAfter = timeBefore;
while (timeAfter - time < 1000) // 1000 us = 1 ms
{
timeAfter = timer();
}