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)
{ //死循环;
}这个是我在网上找的,不过消耗资源太多
给个好点的建议
{
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)
{ //死循环;
}这个是我在网上找的,不过消耗资源太多
给个好点的建议
Thread.Sleep(毫秒);
如果是ui界面的延时,希望避免界面无响应,可以用
int tick = Environment.TickCount;
while(Environment.TickCount - tick < 延时的毫秒) Application.DoEvents();当然,后者是循环,占用cpu会高一些。但这是ui线程中效果和效率比较好的折中了。如果你要延时的时间比较长。建议开个线程,线程开始的时候延迟一定时间,然后通过beginInvoke调用ui的某个方法。
Thread.Sleep( 5 * 1000 );
不会影响线程池中的其他线程吗?
在While里用AutoResetEvent来控制吧。
{
ThreadPool.QueueUserWorkItem(delegate
{
this.Invoke((EventHandler)delegate { this.Text = "starting"; });
Thread.Sleep(5000);
this.Invoke((EventHandler)delegate { this.Text = "done!"; });
});
}
{
ThreadPool.QueueUserWorkItem(delegate
{
this.Invoke((EventHandler)delegate{this.Text="starting"});
Thread.Sleep(5000);
this.Invoke((EventHandler)delegate{this.Text="done";});
});
}