日期:2014-05-18  浏览次数:21525 次

线程问题如何在for循环10秒循环一次中某一循环,循环5秒就进行下一次循环
如何在for循环10秒循环一次中某一循环,循环5秒就进行下一次循环  
代码如下
for (var i = 0; i < 10; i++)

  Thread.Sleep(TimeSpan.FromSeconds(10));

  比如循环到第5次时,不是固定10秒后下一次循环,而是线程等待5秒就进来下一次循环,可以是外界触发。
求代码啊

------解决方案--------------------
what?
------解决方案--------------------
没看明白楼主的意思
------解决方案--------------------
C# code

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));
    }
}

------解决方案--------------------
C# code

for (var i = 0; i < 10; i++)
{
  if(i=4)
{
Thread.Sleep(TimeSpan.FromSeconds(5));
}
else
{
  Thread.Sleep(TimeSpan.FromSeconds(10));
}
}

------解决方案--------------------
continue;
------解决方案--------------------
你为什么不用timer呢

------解决方案--------------------
好像是给循环子加个超时限制的意思
C# code
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秒!
*********操作已超时, 直接进入下一次循环!**********
*/