private int WaitForThreadsInPool(ref List <ThreadInfo> threads) { while (true) { for (int i = 0; i < threads.Count; ++i) { if (!threads[i].IsAlive()) { return(i); } } long speed = transferMetric.speed(); long partDuration = speed != 0 ? (1000 * (partSize / speed)) : 0; long sleep = Math.Max(Math.Min(2 * partDuration / threads.Count, 60000), 500); Console.WriteLine("Main Thread Waiting for Uploader Threads to finish. Sleeping for " + sleep + "ms"); Thread.Sleep((int)sleep); } }
private void DisplayMetrics(object state) { Process proc = Process.GetCurrentProcess(); Console.WriteLine("Downloaded: " + Utilities.BytesToHuman(transferMetrics.bytesTransferred()) + ", Parts: " + transferMetrics.partsTransferred() + ", Speed: " + Utilities.BytesToHuman(transferMetrics.speed()) + "/s" + ", Threads: " + threads.Count + ", RAM: " + Utilities.BytesToHuman(proc.PrivateMemorySize64)); }