//
using System;
+using System.Diagnostics;
using System.Threading;
using NUnit.Framework;
else
ThreadPool.QueueUserWorkItem (_ => { Interlocked.Increment (ref sum); Interlocked.Increment (ref total); });
}
- var start = DateTime.Now;
- while ((total != n || sum != 0) && (DateTime.Now - start).TotalSeconds < 60)
+ var sw = Stopwatch.StartNew ();
+ while ((total != n || sum != 0) && sw.Elapsed.TotalSeconds < 60)
Thread.Sleep (1000);
Assert.IsTrue (total == n, "#1");
Assert.IsTrue (sum == 0, "#2");
workerThreads_new = workerThreads == 1 ? 2 : 1;
completionPortThreads_new = completionPortThreads == 1 ? 2 : 1;
-
ThreadPool.SetMinThreads (workerThreads_new, completionPortThreads_new);
+
ThreadPool.GetMinThreads (out workerThreads, out completionPortThreads);
Assert.IsTrue (workerThreads == workerThreads_new, "#3");
Assert.IsTrue (completionPortThreads == completionPortThreads_new, "#4");
workerThreads_new = workerThreads == cpuCount ? cpuCount + 1 : cpuCount;
completionPortThreads_new = completionPortThreads == cpuCount ? cpuCount + 1 : cpuCount;
-
ThreadPool.SetMaxThreads (workerThreads_new, completionPortThreads_new);
+
ThreadPool.GetMaxThreads (out workerThreads, out completionPortThreads);
Assert.IsTrue (workerThreads == workerThreads_new, "#3");
Assert.IsTrue (completionPortThreads == completionPortThreads_new, "#4");
public void GetAvailableThreads ()
{
ManualResetEvent mre = new ManualResetEvent (false);
- DateTime start = DateTime.Now;
+ var sw = Stopwatch.StartNew ();
int i, workerThreads, completionPortThreads;
try {
+ Assert.IsTrue (ThreadPool.SetMaxThreads (Environment.ProcessorCount, Environment.ProcessorCount));
+
while (true) {
ThreadPool.GetAvailableThreads (out workerThreads, out completionPortThreads);
if (workerThreads == 0)
break;
- if ((DateTime.Now - start).TotalSeconds >= 10)
+ Console.WriteLine ("workerThreads = {0}, completionPortThreads = {1}", workerThreads, completionPortThreads);
+
+ if (sw.Elapsed.TotalSeconds >= 10)
Assert.Fail ("did not reach 0 available threads");
ThreadPool.QueueUserWorkItem (GetAvailableThreads_Callback, mre);