首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个线程处于sleep(10000)状态,如何样让它跳出sleep()状态做别的事

2012-12-18 
一个线程处于sleep(10000)状态,怎么样让它跳出sleep()状态做别的事?一个线程处于sleep(10000)状态,因为一

一个线程处于sleep(10000)状态,怎么样让它跳出sleep()状态做别的事?
一个线程处于sleep(10000)状态,

因为一些突发的状态,必须要此线程跳出sleep状态,然后去做别的事,例如CW("这是CSDN");

求高手答疑!
[最优解释]
最适合状态机实现了:
private volatile string state = "idle";

        private AutoResetEvent are = new AutoResetEvent(false);

        public void Loop()
        {
            while (true)
            {
                switch (state)
                { 
                    case "idle":
                        are.WaitOne(-1, false);
                        state = "doother";
                        break;
                    case "doother":
                        // call fun();
                        state = "idle";
                        break;
                    
                }
            }
        }


[其他解释]

引用:
一旦sleep就无法跳出咯,除非Abort掉这个线程。

为什么不改为

C# code
int i = 0;
while(如果没有突发事件 &amp;&amp; i < 100)
{
   Thread.Sleep(100);
   i++;
}


这个方法不错
[其他解释]
好像不行吧
[其他解释]
我只知道线程自己是不能跳出 sleep的  但是 怎么解决  我还不知道 
[其他解释]
http://msdn.microsoft.com/zh-cn/library/9f7e54k1.aspx
[其他解释]
引用:
http://msdn.microsoft.com/zh-cn/library/9f7e54k1.aspx


有木有简单一点的例子?
[其他解释]
我也想知道有没有 方法实现  帮你顶
------其他解决方案--------------------


1 用wait方式而不是直接sleep
2 修改系统时间试试看?
[其他解释]

引用:
1 用wait方式而不是直接sleep
2 修改系统时间试试看?


wait方式 怎么使用?
[其他解释]
wait的话,那么我的10000的等待怎么解决?
[其他解释]
http://msdn.microsoft.com/zh-cn/library/system.threading.autoresetevent.aspx

这里下面有例子了。
[其他解释]
var waitHandle = new AutoResetEvent(false);

在其他线程中用 waitHandle.WaitOne(1000, false); 来阻止调用的线程.

调用waitHandle.Set();让线程继续工作
[其他解释]
下班了  明天来试试!
[其他解释]

public void Test()
{
Thread thread = new Thread(mymethod);
thread.Start();
thread.sleep(1000);
//下面这里就是thread在sleep的时候你可以在主线程进行其他的操作的说……
Console.WriteLine("csdn越来越差劲");
}
public void mymethod()
{
Console.WriteLine("CSDN越搞质量越差");
}


[其他解释]
不行,SLEEP 线程 就给操作系统了,
[其他解释]
Sleep不行吧
[其他解释]
嗯 sleep是不行 就是要看什么方法 可以实现这个功能
[其他解释]
sleep是让该线程把cpu让给别人
所以没有“跳出sleep状态,然后去做别的事”这样的说法

如果你需要的是线程处于阻塞状态,当其他线程执行完毕后继续该线程,就用waitHandle
[其他解释]
线程在睡眠中还会出现突发状态?
[其他解释]
可以用try{}catch{}把sleep包起来,在外部调用Thread.Interrupt()使线程产生异常。
一定要保证Thread.Interrupt()的时候,线程在try里面,否则线程就结束了。
[其他解释]
引用:
sleep是让该线程把cpu让给别人
所以没有“跳出sleep状态,然后去做别的事”这样的说法

如果你需要的是线程处于阻塞状态,当其他线程执行完毕后继续该线程,就用waitHandle


这个怎么使用?看了MSDN 越看越糊涂~
[其他解释]
试试:Thread.Interrupt()
[其他解释]
引用:
试试:Thread.Interrupt()


MSDN的解释如果此线程当前未阻止在等待、休眠或联接状态中,则下次开始阻止时它将被中断。

按照我的理解,这个方法是不让这个线程阻止在等待、休眠或联接状态中,但是我这个线程是需要它进入sleep的,一旦,一个标记 bool wake up=true 那么这个线程就改立刻跳出阻止状态
[其他解释]
引用:
线程在睡眠中还会出现突发状态?


因为一些突发的状态,必须要此线程跳出sleep状态

我没说是sleep中的线程的突发的状态吧
[其他解释]
你这应该是线程同步的问题...用Monitor吧
[其他解释]
把sleep的10000拆分执行,做个循环每次sleep100,里面在加个if,如果要跳出就break。
[其他解释]
顶楼上,分次执行喽,
------其他解决方案--------------------


一旦sleep就无法跳出咯,除非Abort掉这个线程。

为什么不改为

int i = 0;
while(如果没有突发事件 && i < 100)
{
   Thread.Sleep(100);
   i++;
}

[其他解释]
加一句 Application.DoEvents(); 


[其他解释]
嗯,最好不要做长Sleep,否则线程长时间没有相应   做个短Sleep循环比较好

引用:
引用:

一旦sleep就无法跳出咯,除非Abort掉这个线程。

为什么不改为

C# code
int i = 0;
while(如果没有突发事件 &amp;amp;&amp;amp; i < 100)
{
Thread.Sleep(100);
i++;
}


这个方法不错

[其他解释]
参考:            
            DateTime dt1 = DateTime.Now;
            while (true)
            {
                Application.DoEvents();
                if(需要退出)
                   break;
                DateTime dt2 = DateTime.Now;
                TimeSpan ts = dt2 - dt1;
                if (ts.FromMilliseconds > (double)10000.0) //延时时间到
                    break;
            }

[其他解释]
for(int i=0;i<20;i++)
{
  Thread.Sleep(500);
  if(xxx)
  {
     cw(xxxx);
  }
}
[其他解释]
不懂接分
[其他解释]
如果放弃纠结sleep,重新设计,用不了几分钟你就做完了。
[其他解释]
推荐分次执行,干嘛一下sleep那么长时间。
[其他解释]
引用:
一旦sleep就无法跳出咯,除非Abort掉这个线程。

为什么不改为

C# code
int i = 0;
while(如果没有突发事件 &amp;&amp; i < 100)
{
   Thread.Sleep(100);
   i++;
}

不要一次Sleep很长时间,分多次sleep
[其他解释]
http://blog.csdn.net/yearl/article/details/8228592

有时线程要sleep一段时间。

比如sleep(30),那么,在这段时间里,线程将停止响应,用户无法改变它的sleep状态。

可以这样: 

for(int t=0;(t<timeInterval)and flag;t++){                
    sleep(1);            


}

当调用线程的程序想改变线程的sleep状态时,可以flag= false,线程将立即从sleep状态中退出。


[其他解释]
果然放弃sleep,wait一样可行。还有一些面向硬件事件的api,不太记得了。。
[其他解释]
我晕 这是从线程原理上 进入睡眠的线程自己就无法在时间没到以前做什么了 楼主要做的事情根本就是削足适履的事情
楼上几位说的很对换个思路就引刃而解的事情。

估计楼主是想简单地修改原始代码才会有这样的问题。

热点排行