读书人

一个线程处于sleep(10000)状态如何样

发布时间: 2012-12-18 12:43:41 作者: rapoo

一个线程处于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(如果没有突发事件 && 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(如果没有突发事件 && 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(如果没有突发事件 && 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,不太记得了。。
[其他解释]
我晕 这是从线程原理上 进入睡眠的线程自己就无法在时间没到以前做什么了 楼主要做的事情根本就是削足适履的事情
楼上几位说的很对换个思路就引刃而解的事情。

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

读书人网 >C#

热点推荐