Вопрос по Курсу: "Параллельное программирование с использованием MS VisualStudia 2010". При компиляции Самостоятельного задания (одновременная отрисовка прямоугольников, эллипсов и выдача в текст-бокс случайного числа) среда предупреждает: suspend - устаревшая команда; примените monitor, mutex и т.п. Создаётся впечатление, что Задание создано в более поздней среде, чем VS 2010. |
Томский политехнический университет
Опубликован: 23.01.2013 | Доступ: свободный | Студентов: 1157 / 192 | Длительность: 12:09:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Самостоятельная работа 11:
Отладка многопоточного приложения с использованием окна задач
< Самостоятельная работа 10 || Самостоятельная работа 11 || Лекция 13 >
Аннотация: Практическое занятие посвящено процессу отладки параллельного приложения с использованием инструмента Parallel Task.
- Создадим новое консольное приложение в Visual Studio, с названием "ParralelTaskApllication":
- Скопируем, заранее созданный код, в проект:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; namespace ParralelTaskApllication { class XClass { public void MA(object param) { MB(param); } public void MB(object param) { MC(param); } object s1 = new object(); object s2 = new object(); public void MC(object param) { if (param == "1") { MD(); } if (param == "2") { ME(); } if (param == "3") { MF(); } } public void MD() { ME(); } public void ME() { while (true) Thread.SpinWait(int.MaxValue / 20); } public void MF() { ML(); } public void MG(object param) { MH(param); } public void MH(object param) { MI(param); } public void MI(object param) { if (param == "4") { MJ(); } else { MK(); } } public void MJ() { Monitor.Enter(s1); Thread.SpinWait(int.MaxValue / 20); Monitor.Enter(s2); } public void MK() { Monitor.Enter(s2); Thread.SpinWait(int.MaxValue / 10); Monitor.Enter(s1); } public void ML() { MM(); } public void MM() { while (true) { Thread.SpinWait(int.MaxValue / 3); Debugger.Break(); }; } } class Program { static XClass obj = null; static void Main(string[] args) { obj = new XClass(); Task.Factory.StartNew(obj.MA, "1"); Task.Factory.StartNew(obj.MA, "2"); Task.Factory.StartNew(obj.MA, "3"); Task.Factory.StartNew(obj.MG, "4"); Task.Factory.StartNew(obj.MG, "5"); Console.ReadLine(); } } }
- Запустите отладку программы с помощью кнопки "Start Debbuging" из меню Visual Studio - "Debug" или с помощью клавиши "F5":
- Через несколько секунд "Курсор отладки" должен остановиться на методе Debbuger.Break():
- Запустите окно параллельных задач (Parallel Task) из меню "Debug -> Windows" или с помощью сочетания клавиш "Ctrl+Shift+D,K":
- Откроется окно параллельных задач (Parallel Task):
В данном окне, по каждой запущенной задачи можно увидеть: уникальный идентификатор задачи, имя потока, который запускает задача, ее расположение.
- Для того, что бы "заморозить" выполнение конкретного потока, щелкните на нужном потоке в списке - правой кнопкой мыши и выберите пункт "Freeze Assigned Thread":
Напротив потока должен отобразиться соответствующий значок:
Если поток "замораживается", то он не будет выполняться при проходе по коду после текущей точки останова.
- Для перехода на нужный поток используется пункт меню "Switch To Task". При этом программа перейдет на участок кода соответствующий данному потоку. В нашем случае метод с ID = 2 соответствует методу public void ME():
- Для завершения процесса отладки используется пункт из меню "Debug" - "Stop Debugging" или сочетание клавиш "Shift+F5":
< Самостоятельная работа 10 || Самостоятельная работа 11 || Лекция 13 >