Вопрос

У меня есть многопоточное приложение в C ++ для Windows 7. Это приложение скомпилировано как DLL для использования другого приложения C #.

Я запускаю многопоточный код в течение длительного времени для обработки потоковых данных. Если я компилирую этот код C ++ в автономный .exe, и запустите код, он работает нормально.

Но когда он превращается в dll, и когда код C # работает с ним, программа сбивается с ошибкой нарушения доступа после длительного прогона. Я вижу подобную аварию, когда я загружаю DLL из сценария Python и запустить его в течение длительных часов.

Когда я смотрю поведение, используя диспетчер задач, я вижу, что подсчет обработки системы увеличивается на самом быстром темпе. Примерно через 2 часа запуска кода я вижу подсчет ручки Cross 300 000 отметку, и он продолжает увеличиваться.

Внутри многопоточного кода резьбы создаются и разрываются непрерывно. Я вижу, что после того, как резьба будет выходить, ручка потоков не закрывается явно закрытой функцией CloseHandle. Может ли это быть потенциальной проблемой?

Как мне подтвердить, что это проблема обрабатывает. Каковы способы посмотреть эти системные ресурсы лучше? Прежде чем пытаться попробовать какие-либо исправления, я хотел бы знать все возможные решения, так как тестовые прогоны занимают много времени, более 5 часов, чтобы воспроизвести сбой.

Это было полезно?

Решение

Сисинтерналы Проводник процесса может просматривать ручки в процессе и идентифицироватьИх как нить, Mutex, файл и т. Д. Обрабатывает.Вам определенно нужно закрыть () каждую ручку нити, чтобы очистить их.

Кроме того, создание нити - дорогостоящая операция.Если вы создаете много рабочих мест по никам, лучше покидать задания и создать пул ограниченного количества потоков (обычно примерно равных количеству процессоров в системе), который тянет из очереди и выполняет задание.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top