我想動態創建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