Отладка многопоточного решения C # - C ++ / CLI - C ++ в Visual Studio 2008: что это за потоки? - PullRequest
1 голос
/ 16 июля 2010

Я унаследовал проект, состоящий из трех уровней кода.Самый нижний уровень - это родной C ++, который взаимодействует с оборудованием.Это зрелый, стабильный и хорошо проверенный.Кодом промежуточного уровня является C ++ / CLI, который взаимодействует с кодом C # верхнего уровня, который содержит элементы пользовательского интерфейса и некоторые дополнительные функции.Этот код C # является неполным и был спешно в разработке: он часто дает сбой и не подходит для цели.Моя задача - отладить и завершить его.

Я использую VS 2008, чтобы пройти по многопоточному коду, чтобы понять, с чего начать этот проект.Простой вопрос: в окне «Потоки» у меня есть два именованных потока: рабочий поток, который обменивается данными с некоторым базовым оборудованием (т. Е. Кодом C ++) и поток пользовательского интерфейса.

Однако, шагая по коду, существует довольно много рабочих потоков, у которых нет имени и стека вызовов, связанных с ними, которые кажутся случайными.У них нет записи на панели инструментов «Отладочная локация», и они не отображаются в коде, если выбрано «Показывать потоки в исходном коде».

Что это такое, и я должен быть обеспокоено них?Они, кажется, не из нативного кода (так как он использует Boost для многопоточности, и это ясно из стека вызовов).Замораживание их или изменение их приоритета, кажется, не имеет никакого эффекта.

Я не отлаживал многопоточный код этой сложности прежде, поэтому любой совет очень ценится!

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

В дополнение к потокам вашего приложения в приложении .NET есть еще несколько.Среда выполнения использует выделенный поток для запуска финализаторов.Как указывает driis, вы также можете видеть потоки пула потоков.Отладчик также запускает поток.Если вы используете vshost, вы получите дополнительные издержки дополнительных потоков .

1 голос
/ 16 июля 2010

Эти потоки, вероятно, .NET ThreadPool потоков.

...