首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速停车

快速停车
EN

Stack Overflow用户
提问于 2011-09-27 01:08:41
回答 3查看 453关注 0票数 1

我有这样的代码:

代码语言:javascript
复制
private STOP = false;

public void Start()
{
     while(!STOP)
     {
          //do some work
          Thread.Sleep(15000);
     }
}

public void Stop()
{
     STOP = true;
}

但使用此代码有时需要等待15秒,如何快速停止此循环或可能需要使用其他代码?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-27 01:12:47

大致是这样的:

代码语言:javascript
复制
private System.Threading.ManualResetEvent STOP = new System.Threading.ManualResetEvent(false);

public void Start()
{
     while(true)
     {
          //do some work
          if(STOP.WaitOne(15000))
            break;
     }
}

public void Stop()
{
    STOP.Set();
}
票数 7
EN

Stack Overflow用户

发布于 2011-09-27 01:20:06

每当你发现自己在写一个循环来做一些事情,然后等待一段相对较长的时间(即使是一秒也是很长的时间!)要再次这样做,您应该消除循环并使用计时器。例如,可以重写上面的代码:

代码语言:javascript
复制
System.Threading.Timer MyTimer;

public void Start()
{
    MyTimer = new Timer((s) =>
        {
            DoSomeWork();
        }, null, 15000, 15000);
}

计时器将每15秒触发一次来完成工作。当需要关闭程序时,只需丢弃计时器即可。

代码语言:javascript
复制
public void Stop()
{
    MyTimer.Dispose();
}

这将比使用一个单独的线程更有效,该线程将大部分时间用于休眠,但仍然消耗系统资源。

票数 3
EN

Stack Overflow用户

发布于 2011-09-27 01:17:28

使用带超时的ManualResetEvent.WaitOne。

代码语言:javascript
复制
manualResetEvent.WaitOne(timeout)

将事件设置为唤醒它,否则它将在超时时唤醒。

请参阅相关的question.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7558612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档