Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

Многопоточная работа

Вы не вошли.

 Поиск | Регистрация | Вход 

10.07.2016 20:53:15
#1

Участник
Здесь с 17.12.2015
Сообщений: 12

Многопоточная работа

Доброго времени суток.
Работа с платой L783, ОС Win7, MS VisualStudio 2010 (C++), драйвер свежий.
Обнаружена странная (и страшная) проблема - последовательный вызов методов StartLDevice и StopLDevice из разных программных потоков (Thread) гарантированно приводит к BSOD (синий экран смерти) с ошибкой в драйвере от LCard.
Кстати, к BSOD также приводит попытка пошаговой отладки приложения после вызова StartLDevice, но не всегда.
Так было задумано?

10.07.2016 21:32:40
#2

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: Многопоточная работа

Алексей,
уточните: L-783 или L-783M?

11.07.2016 12:50:54
#3

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Многопоточная работа

Пример кода пришлите на почту poul@lcard.ru

12.07.2016 21:28:39
#4

Участник
Здесь с 17.12.2015
Сообщений: 12

Re: Многопоточная работа

Да, конечно, L-783M
Пример кода выслать не могу. Суть - один поток вызывает StartLDevice и завершается. Второй поток вызывает StopLDevice и получаем BSOD.
Задачу мы, конечно, решили, вынеся все работу с платой в отдельный поток и наладив вменяемое межпоточное взаимодействие, но проблема, тем не менее, осталась.
Забыл уточнить - BSOD ловим только если поток, который вызвал StartLDevice завершился. Если нет - все хорошо. Драйвер, что, указывает из ядра на память стека процесса в User-space?

13.07.2016 12:59:37
#5

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Многопоточная работа

Память выделяется в user-space и потом pending request хранится в очереди в драйвере. По идеи если в основном треде прошла инициализация и запрос памяти, то потом start должен отрабатывать из другого треда и stop тоже...

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск