public void search()
        {
            ThreadPool.SetMaxThreads(2000, 3000);
            ThreadPool.SetMinThreads(1000, 2000);
            for (int i = 0; i < 1000000; i++)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(Dowork), i);
            }
        }
        public void Dowork(object state)
        {
            
for(int i=0;i<1000000;i++)
{
if(条件){
延时5秒;
}
...
for(int j=0;j<100000;j++)
{
if(条件)
{
延时5秒
}
...
}
}
        }请问这个延时怎么实现?
要求消耗资源要少(因为线程太多)DateTime t = DateTime.Now.AddSeconds(5);            while (DateTime.Now < t)
            {                //死循环;
            }这个是我在网上找的,不过消耗资源太多
给个好点的建议

解决方案 »

  1.   

    用timer 控件 实现不行吗
      

  2.   

    Thread.Sleep( 5 * 1000 );
      

  3.   

    如果是线程中的延时,就直接用
    Thread.Sleep(毫秒);
    如果是ui界面的延时,希望避免界面无响应,可以用
    int tick = Environment.TickCount;
    while(Environment.TickCount - tick < 延时的毫秒) Application.DoEvents();当然,后者是循环,占用cpu会高一些。但这是ui线程中效果和效率比较好的折中了。如果你要延时的时间比较长。建议开个线程,线程开始的时候延迟一定时间,然后通过beginInvoke调用ui的某个方法。
      

  4.   

    在线程池中可以这样用吗?
    Thread.Sleep( 5 * 1000 );
      

  5.   

    Thread.Sleep( 5 * 1000 );
    不会影响线程池中的其他线程吗?
      

  6.   

    你这段代码性能太低,会无谓的浪费CPU开销。
    在While里用AutoResetEvent来控制吧。
      

  7.   

    将当前线程阻塞指定的毫秒数。from msdn不过,这个函数依然占用较多资源
      

  8.   

    可以用sleep。private void button2_Click(object sender, EventArgs e)
    {
        ThreadPool.QueueUserWorkItem(delegate
        {
            this.Invoke((EventHandler)delegate { this.Text = "starting"; });
            Thread.Sleep(5000);
            this.Invoke((EventHandler)delegate { this.Text = "done!"; });
        });
    }
      

  9.   

    Thread.Sleep( 5 * 1000 );线程挂起一下
      

  10.   

    private void button2_click(object sender,EventArgs)
    {
       ThreadPool.QueueUserWorkItem(delegate
       {
         this.Invoke((EventHandler)delegate{this.Text="starting"});
         Thread.Sleep(5000);
         this.Invoke((EventHandler)delegate{this.Text="done";});
         
        });
    }
      

  11.   

    大哥,你自己查一下MSDN里AutoResetEvent的类,授人以鱼不如授之以渔,如果代码都给你写出来了,你下回还是记不住,对不对?