Параллельный вызов dll
- Juri
- I/O
- Сообщения: 263
- Зарегистрирован: 19 апр 2017, 23:06
- Версия LabVIEW: 2021
- Благодарил (а): 13 раз
- Поблагодарили: 6 раз
Параллельный вызов dll
Tcp sniffer скачал когда-то с форума ni. Там dll обращается к winpcap. Все работает хорошо пока нет нужды обращаться одновременно к двум сетевым устройствам. Я эту проблему решил просто создав копию библиотеки dll с новым именем и теперь вызываю две одинаковых библиотеки параллельно. А может есть кошерный способ не городить копий?
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Параллельный вызов dll
Я аналогичным образом делал, когда выполнял захват изображения с двух USB-Cam посредством DLL.
А что касается других способов, то мне кажется это от DLL зависит, если функции не поддерживают параллельный запуск, то наверное ничего и не получится, т.к. копии память поделить не смогу между собой.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 174 раза
- Контактная информация:
Re: Параллельный вызов dll
"Поддерживаю предыдущего оратора"
У нас в отделе живут dll обоих типов. Если разработчик позаботился о параллельности, то работаем с одним экземпляром.
Если нет, то параллелим клонированием. Вплоть до того, что определяем количество процессоров в машине и программно создаём копии dll, а в реентрантную функцию передаём имя клона, с которым она уже работает.
Если у вас заранее известно количество копий, то можно так не заморачиваться.
Библиотеку качать лень. Но если там есть какой-то хэндлер вызова, то шансы на параллельность есть.
У нас в отделе живут dll обоих типов. Если разработчик позаботился о параллельности, то работаем с одним экземпляром.
Если нет, то параллелим клонированием. Вплоть до того, что определяем количество процессоров в машине и программно создаём копии dll, а в реентрантную функцию передаём имя клона, с которым она уже работает.
Если у вас заранее известно количество копий, то можно так не заморачиваться.
Библиотеку качать лень. Но если там есть какой-то хэндлер вызова, то шансы на параллельность есть.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Параллельный вызов dll
( https://seclists.org/nmap-dev/2015/q3/347 )From my perspective, WinPcap's binding adapters is designed to be reentrant, as no shared variables are used. And the NdisOpenAdapter function called by WinPcap should be reentrant too according to MSDN: https://msdn.microsoft.com/en-us/library/ee481122.aspx.
В большинстве случаев функции WinAPI реентерантны, если на MSDN явно не указано иначе. Функции WinPCap должны быть тоже, разработчики на это намекают: https://www.winpcap.org/pipermail/winpc ... 01674.html Остаётся только враппер lvwpcap.dll, т.к. внутри SubVI всё CLFN'ы уже жёлтые (Any Thread). Детально в исходник нет времени вникать, бегло посмотрел lvwpcap.cpp. В целом довольно неплохо написано, единственная глобальная переменная это pcap_if_t *gDevices. То есть, инициализация (lvwpcap_init <- Initialize.vi) и финализация (lvwpcap_uninit <- Uninitialize.vi) должны всегда вызываться однократно. Остальным функциям без разницы, как их будут вызывать. А что конкретно не работает?
- Juri
- I/O
- Сообщения: 263
- Зарегистрирован: 19 апр 2017, 23:06
- Версия LabVIEW: 2021
- Благодарил (а): 13 раз
- Поблагодарили: 6 раз
Re: Параллельный вызов dll
Пример скачивал кажется от сюда https://forums.ni.com/t5/Example-Code/E ... anguage=en Все виайки класса сделал Preallocated.dadreamer писал(а): ↑19 май 2020, 08:25( https://seclists.org/nmap-dev/2015/q3/347 )From my perspective, WinPcap's binding adapters is designed to be reentrant, as no shared variables are used. And the NdisOpenAdapter function called by WinPcap should be reentrant too according to MSDN: https://msdn.microsoft.com/en-us/library/ee481122.aspx.
В большинстве случаев функции WinAPI реентерантны, если на MSDN явно не указано иначе. Функции WinPCap должны быть тоже, разработчики на это намекают: https://www.winpcap.org/pipermail/winpc ... 01674.html Остаётся только враппер lvwpcap.dll, т.к. внутри SubVI всё CLFN'ы уже жёлтые (Any Thread). Детально в исходник нет времени вникать, бегло посмотрел lvwpcap.cpp. В целом довольно неплохо написано, единственная глобальная переменная это pcap_if_t *gDevices. То есть, инициализация (lvwpcap_init <- Initialize.vi) и финализация (lvwpcap_uninit <- Uninitialize.vi) должны всегда вызываться однократно. Остальным функциям без разницы, как их будут вызывать. А что конкретно не работает?
На скрине я параллельно вызываю функцию определения списка текущих сетевых устройств. По идее рузельтат должен быть одинаков в обоих случаях. Но он разный. Тоже самое получается при вызове функции RadPacket. Пакеты приходят с потерями, либо вообще работает только одна копия vi
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Параллельный вызов dll
Попробуйте инициализацию и финализацию сделать одну на два потока.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение