我想动态创建X线程量(由用户指定)然后基本上它们都在同一时间执行一些代码,间隔为1秒。创建X线程,同时执行一个任务
我遇到的问题是我试图完成的任务依赖于循环来确定当前IP是否等于最后一个。 (它扫描主机)所以,因为我有这个循环里面,它会关闭,然后其他线程不会创建,并且不执行代码。我希望他们都同时离开,等待1秒钟(使用定时器或其他不锁定线程的东西,因为它正在执行的代码有一个等待的超时时间。)任何人都可以帮我解决吗?这是我目前的代码:
int threads = Convert.ToInt32(txtThreads.Text);
List<Thread> workerThreads = new List<Thread>();
string from = txtStart.Text, to = txtEnd.Text;
uint current = from.ToUInt(), last = to.ToUInt();
ulong total = last - current;
for (int i = 0; i < threads; i++)
{
Thread thread = new Thread(() =>
{
for (int t = 0; t < Convert.ToInt32(total); t += i)
{
while (current <= last)
{
current = Convert.ToUInt32(current + t);
var ip = current.ToIPAddress();
doSomething(ip);
}
}
});
workerThreads.Add(thread);
thread.Start();
}
你可以删除你的'thread.Start'和之后的for循环,做'workerThreads.ForEach(T = > t.Start());' – Jonesopolis
看来你想做网络事情。这意味着有很大的延迟。所以大部分线程都在等待。你应该考虑一个类似于node.js的事件循环,并使用异步和等待的东西。见这里[http://www.codeproject.com/Articles/481080/Continuous-asynchronous-Ping-using-TAP-and-IProgre]。 如果你仍然想使用线程,你也应该在每个线程上调用Join。 – schoetbi
@schoetbi我实际上已经使用任务并行库创建了一个异步实现。我正在创建这个,所以我可以做一些基准测试。我主要是在寻找速度和准确性,所以我想看看哪个实现会更快。 – user1632018