線程問題如何在for循環10秒循環一次中某一循環,循環5秒就進行下一次循環


如何在for循環10秒循環一次中某一循環,循環5秒就進行下一次循環  
代碼如下
for (var i = 0; i < 10; i++)

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

    比如循環到第5次時,不是固定10秒后下一次循環,而是線程等待5秒就進來下一次循環,可以是外界觸發。
求代碼啊

10 个解决方案

#1


有木有人啊,路過的幫頂下也行啊,

#2


不要沉下去,新手,幫幫忙啊大哥們

#3


what?

#4


沒看明白樓主的意思 

#5



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



#6



for (var i = 0; i < 10; i++)

  if(i=4)
{
Thread.Sleep(TimeSpan.FromSeconds(5));
}
else
{
  Thread.Sleep(TimeSpan.FromSeconds(10));
}

#7


引用 6 樓 chenandczh 的回復:
C# code

for (var i = 0; i < 10; i++)

  if(i=4)
{
Thread.Sleep(TimeSpan.FromSeconds(5));
}
else
{
  Thread.Sleep(TimeSpan.FromSeconds(10));
}

沒明白我的意思啊。我意思是執行了Thread.Sleep(TimeSpan.FromSeconds(10))時,再這個等待線程5秒鍾時就讓它結束進入下一次循環

#8


continue;

#9


你為什么不用timer呢

#10


好像是給循環子加個超時限制的意思
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秒!
*********操作已超時, 直接進入下一次循環!**********
*/

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com