-
Code's Tags
-
Your Codes
-
Reffers
-
Linked Codes
|
Code:
Short link for Twitter:
HTML:
HTML view:
Copy Source | Copy HTML- public class MainTests
- {
- //количество ошибок по результату выполнения
- public static int iErrors = 0;
-
- private static ManualResetEvent[] resetEvents;
-
- /// <summary>
- /// Запускаем одновременно NumThreads потоков
- /// </summary>
- /// <param name="NumThreads">Число потоков</param>
- public void QueueFewRequests(int NumThreads, AskTo whereto)
- {
- ManualResetEvent oStart = new ManualResetEvent(false);
- Debug.WriteLine("-------------QueueFewRequests = " + NumThreads.ToString() + " " + whereto.ToString() + "----------");
- resetEvents = new ManualResetEvent[NumThreads];
- for (int i = 0; i < NumThreads; i++)
- {
- resetEvents[i] = new ManualResetEvent(false);
- if (!ThreadPool.UnsafeQueueUserWorkItem(new WaitCallback(MakeSingleSearch),
- new ThreadParam()
- {
- number = i,
- oEvent = resetEvents[i],
- oWhenStart = oStart,
- askto = whereto
- }))
- {
- MainTests.iErrors++;
- System.Diagnostics.Debug.WriteLine("Cant Queue request!");
- break;
- }
- }
- //let it go!
- oStart.Set();
- if (NumThreads < 64)
- {
- ManualResetEvent.WaitAll(resetEvents);
- }
- else
- {
- //если элементов меньше 64, то можно использовать ManualResetEvent.WaitAll(resetEvents);
- Array.ForEach(resetEvents, new Action<ManualResetEvent>(WaitFinish));
- }
- Assert.AreEqual(0, MainTests.iErrors);
- }
-
- private void WaitFinish(ManualResetEvent oEvent)
- {
- oEvent.WaitOne();
- }
-
- /// <summary>
- /// Передаем один запрос в службу
- /// </summary>
- /// <param name="stateInfo"></param>
- static void MakeSingleSearch(Object stateInfo)
- {
- Random rand = new Random(DateTime.Now.Millisecond + ((ThreadParam)stateInfo).number);
-
- if (stateInfo != null)
- {
- //дождемся команды начала работы
- ((ThreadParam)stateInfo).oWhenStart.WaitOne();
- int iRand = (int)Math.Floor(rand.NextDouble() * 1000)+100;
- try
- {
- DSTLCode dCode;
- PerformanceTimer timer = new PerformanceTimer();
- timer.StartTimer();
- //определимся с запросом
- AskTo whatwedo = ((ThreadParam)stateInfo).askto;
- switch (whatwedo)
- {
- ...
- }
- Debug.WriteLine("Thread " +
- ((ThreadParam)stateInfo).number + " - " + dCode.ToString() + " " +
- " for '" + iRand.ToString() + "' successed in " + timer.StopTimer().ToString() + " sec");
-
-
- }
- catch(Exception e1)
- {
- iErrors++;
- Debug.WriteLine("Thread " +
- ((ThreadParam)stateInfo).number + " - Ошибка обработки: " + e1.Message);
- }
- finally
- {
- //передаем информацию о том, что мы завершили работу
- ((ThreadParam)stateInfo).oEvent.Set();
- }
- }
- }
- }
|