线程问题如何在for循环10秒循环一次中某一循环,循环5秒就进行下一次循环
如何在for循环10秒循环一次中某一循环,循环5秒就进行下一次循环
代码如下
for (var i = 0; i < 10; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(10));
}
比如循环到第5次时,不是固定10秒后下一次循环,而是线程等待5秒就进来下一次循环,可以是外界触发。
求代码啊
[解决办法]
what?
[解决办法]
没看明白楼主的意思
[解决办法]
bool bChange = false; //定义全局变量,然后提供接口从外部可以设置bChange的值for (var i = 0; i < 10; i++){ if(bChange) { bChange = false; Thread.Sleep(TimeSpan.FromSeconds(5)); } else { Thread.Sleep(TimeSpan.FromSeconds(10)); }}
[解决办法]
for (var i = 0; i < 10; i++){ if(i=4){Thread.Sleep(TimeSpan.FromSeconds(5));}else{ Thread.Sleep(TimeSpan.FromSeconds(10));}}
[解决办法]
continue;
[解决办法]
你为什么不用timer呢
[解决办法]
好像是给循环子加个超时限制的意思
private AutoResetEvent autoEvent = new AutoResetEvent(false);public void TestTimeLimit(){ int timeOut = 2; for(int i=1; i<=5; i++) { Console.WriteLine("第{0}次循环, 限时{1}秒!", i, timeOut); Thread t = new Thread(new ParameterizedThreadStart( (evt) => { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); Thread.Sleep(new Random().Next(100, 4000)); sw.Stop(); if ( sw.ElapsedMilliseconds / 1000 < timeOut) { Console.WriteLine("正在执行操作..本次耗时:{0}毫秒!", sw.ElapsedMilliseconds); ((AutoResetEvent)evt).Set(); //发出通知信号 } })); t.Start(autoEvent); if (this.autoEvent.WaitOne(TimeSpan.FromSeconds(timeOut), false)) Console.WriteLine("本次操作没有超时!\r\n"); else { Console.WriteLine("*********操作已超时, 直接进入下一次循环!**********\r\n"); continue; } }}/*第1次循环, 限时2秒!*********操作已超时, 直接进入下一次循环!**********第2次循环, 限时2秒!正在执行操作..本次耗时:605毫秒!本次操作没有超时!第3次循环, 限时2秒!正在执行操作..本次耗时:1218毫秒!本次操作没有超时!第4次循环, 限时2秒!*********操作已超时, 直接进入下一次循环!**********第5次循环, 限时2秒!*********操作已超时, 直接进入下一次循环!***********/