
C#有关线程与计时的问题
现设function();为一个需要执行一段时间的函数。在.net4.5中我写了如下代码,很好地达到了我的目的:Task.Delay(1000);function();…...
现设function();为一个需要执行一段时间的函数。
在.net 4.5中我写了如下代码,很好地达到了我的目的:
Task.Delay(1000);
function();
……
这样的效果是:如果function()在1000毫秒内执行完毕,那就得等够1000毫秒才能执行接下来(……)的部分。如果function执行超过1000毫秒,那么执行完它,就会立刻执行接下来的代码。这是因为Task.Delay()是在另一线程中进行的,不会影响function()的执行;这与Thread.Sleep(1000)不同,Sleep是阻塞当前线程,它会导致function()多执行1000毫秒。
然而不幸的是:.net 4及以下版本是没有Task.Delay()函数的,我就不知道该怎样实现上述代码的效果。
请问,如何才能在.net 4中实现如同.net 4.5中我写的代码一样的功能呢?
谢谢! 展开
在.net 4.5中我写了如下代码,很好地达到了我的目的:
Task.Delay(1000);
function();
……
这样的效果是:如果function()在1000毫秒内执行完毕,那就得等够1000毫秒才能执行接下来(……)的部分。如果function执行超过1000毫秒,那么执行完它,就会立刻执行接下来的代码。这是因为Task.Delay()是在另一线程中进行的,不会影响function()的执行;这与Thread.Sleep(1000)不同,Sleep是阻塞当前线程,它会导致function()多执行1000毫秒。
然而不幸的是:.net 4及以下版本是没有Task.Delay()函数的,我就不知道该怎样实现上述代码的效果。
请问,如何才能在.net 4中实现如同.net 4.5中我写的代码一样的功能呢?
谢谢! 展开
1个回答
展开全部
static AutoResetEvent _event;
_event = new AutoResetEvent(false); 申请
新起一个线程 thread.sleep(1000)之后 执行 _event.Set();
function的线程 在functions()下面写 _event.WaitOne(); 阻塞
由于 _event.WaitOne(); 会等待 _event.Set(); 执行后才能激活当前线程
就导致 如果小于1000毫秒就会等待 新线程sleep 1000之后执行set
大于1000毫秒 在funtion执行完毕时 由于新线程_event.Set(); 已经执行完毕 则_event.WaitOne();可以直接通过不必阻塞
_event = new AutoResetEvent(false); 申请
新起一个线程 thread.sleep(1000)之后 执行 _event.Set();
function的线程 在functions()下面写 _event.WaitOne(); 阻塞
由于 _event.WaitOne(); 会等待 _event.Set(); 执行后才能激活当前线程
就导致 如果小于1000毫秒就会等待 新线程sleep 1000之后执行set
大于1000毫秒 在funtion执行完毕时 由于新线程_event.Set(); 已经执行完毕 则_event.WaitOne();可以直接通过不必阻塞
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询