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