|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Есть некий девайс (физический) к которому идет программа, и также сдк. Функционал реализует длл. СДК требует чтобы перед всеми функциями была вызвана функция инициализации, мол ресурсы выделяет. А вот тут загада - эта функция инициализации с девайсом не общается, т.к. контактных данных у нее нет, они только в следующей функции коннекта. Какого-то хендла эта функция тоже не выдает. Как длл-ка может хранить хотя-бы адрес где она что-то выделила, если это всего лишь сборник функций? (доп процессов никаких не запускает, файлов не плодит) Второй вопрос - "фирменная" программа общается с несколькими девайсами одновременно, явно в многопотоке, пример из СДК только по очереди. Если инициализация что-то выделила и как-то где-то хранит, как программа это распараллеливает? (Длл-ка одна и та-же) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 18:48 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
iskatelsqlЕсть некий девайс (физический) к которому идет программа, и также сдк. Функционал реализует длл. СДК требует чтобы перед всеми функциями была вызвана функция инициализации, мол ресурсы выделяет. А вот тут загада - эта функция инициализации с девайсом не общается, т.к. контактных данных у нее нет, они только в следующей функции коннекта. Какого-то хендла эта функция тоже не выдает. Как длл-ка может хранить хотя-бы адрес где она что-то выделила, если это всего лишь сборник функций? Не только http://wm-help.net/books-online/book/59464/59464-12.html#h19 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:04 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Соколинский Борис, Не очень понял, в какой строке этого талмуда ответ на вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:08 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
iskatelsqlКак длл-ка может хранить хотя-бы адрес где она что-то выделила, если это всего лишь сборник функций? dll может содержать и код, и данные iskatelsqlЕсли инициализация что-то выделила и как-то где-то хранит, как программа это распараллеливает? (Длл-ка одна и та-же) ThreadId позвлляет различить потоки, да и TLS никто не отменял ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:10 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Изопропил, данные она может содержать, но статические. при создании прилинкованные, где она адрес выделенной памяти то хранит? А потоки различать - так в вызовы не передается ничего такого, ты про нее говоришь как про отдельный процесс, это простая длл-ка. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:13 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
iskatelsqlгде она адрес выделенной памяти то хранит? в статической переменной iskatelsqlА потоки различать - так в вызовы не передается ничего такого, ты про нее говоришь как про отдельный процесс, это простая длл-ка. GetCurrentThreadId() ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:23 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
ИзопропилGetCurrentThreadId() А эту она импортирует, да. Не очень понял про статическую переменную правда... Ну и основной вопрос - значит и я могу без опаски ее в потоках использовать, или есть подводные камни? В СДК об это ни слова ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:28 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
iskatelsqlСоколинский Борис, Не очень понял, в какой строке этого талмуда ответ на вопрос? Вы за 3 минуты смогли его осилить? Впрочем вопрос свидетельствует о том, как. Вы уже знаете, что глобальные и статические переменные ЕХЕ-файла пе разделяются его параллельно выполняемыми экземплярами. В Windows 98 это достигается за счет выделения специальной области памяти для таких переменных при проецировании ЕХЕ-файла на адресное пространство процесса, а в Windows 2000 — с помощью механизма копирования при записи, рассмотренного в главе 13 Глобальные и статические переменные DLL обрабатываются точно так же. Когда какой-то процесс проецирует образ DLL-файла на свое адресное пространство, система создает также экземпляры глобальных и статических переменных . Перевод слегка корявый, но смысл понятен - это переменные именно библиотеки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:40 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Соколинский Борис, Осилил я его еще году в 2001, сейчас мельком пролистал, но никогда не приходило в голову что длл может сама создавать статические переменные. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:47 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
iskatelsqlдлл может сама создавать статические переменные. они просто в сегменте данных расположены iskatelsqlНу и основной вопрос - значит и я могу без опаски ее в потоках использовать, или есть подводные камни? В СДК об это ни слова если ни слова - ничего заранее сказать нельзя ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 19:55 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
iskatelsqlНу и основной вопрос - значит и я могу без опаски ее в потоках использовать, или есть подводные камни? В СДК об это ни слова Подводных камней там вагон и маленькая тележка. Задайте вопрос производителю прежде чем использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 20:29 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Изопропил TLS никто не отменял В WinXP для DLL его нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 20:37 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Dima TИзопропил TLS никто не отменял В WinXP для DLL его нет. TLS есть, просто писать в dll _declspec(thread) нельзя в XP при явной загрузке (LoadLibrary) https://docs.microsoft.com/ru-ru/windows/desktop/Dlls/dynamic-link-library-data ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 21:02 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Если в документации не заявлено что функции потокобезопасны (threadsafe), то они не предназначены для многопоточного использования. Поэтому оберни все вызовы функций мутексом: заблокировал мутекс, поработал с функциями, разблокировал. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 21:06 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
ИзопропилDima Tпропущено... В WinXP для DLL его нет. TLS есть, просто писать в dll _declspec(thread) нельзя в XP при явной загрузке (LoadLibrary) https://docs.microsoft.com/ru-ru/windows/desktop/Dlls/dynamic-link-library-data Верно, т.е. в общем случае его нет, наступил на эти грабли ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 21:09 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Dima TЕсли в документации не заявлено что функции потокобезопасны (threadsafe), то они не предназначены для многопоточного использования. Поэтому оберни все вызовы функций мутексом: заблокировал мутекс, поработал с функциями, разблокировал. Во-первых, это не все проблемы решает. Во-вторых - на кой черт тогда многопоточность? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 21:27 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Dima T, ну дык при явном получении слота проблем нет (и в общем случае TLS - таки есть) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2019, 21:30 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Соколинский БорисDima TЕсли в документации не заявлено что функции потокобезопасны (threadsafe), то они не предназначены для многопоточного использования. Поэтому оберни все вызовы функций мутексом: заблокировал мутекс, поработал с функциями, разблокировал. Во-первых, это не все проблемы решает. Какие проблемы остаются? Соколинский БорисВо-вторых - на кой черт тогда многопоточность? Вопрос к разработчику DLL. Похоже он решил что пользователям DLL многопоточность не потребуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2019, 08:46 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
iskatelsqlникогда не приходило в голову что длл может сама создавать статические переменные. При загрузке DLL вызывается DllMain() , оттуда происходит инициализация окружения DLL. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2019, 09:01 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Dima TКакие проблемы остаются? Например необходимость продолжения работы в том же потоке, в котором выполнялось первое обращение типа open, create etc ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2019, 09:25 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Dima TСоколинский Бориспропущено... Во-первых, это не все проблемы решает. Какие проблемы остаются? Например, обработка сообщений, которые прилетают только в поток-создатель окна. Менеджер памяти может неправильно работать, отрисовка и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2019, 09:25 |
|
Пара вопросов про длл и многопоточность
|
|||
---|---|---|---|
#18+
Соколинский Борисна кой черт тогда многопоточность? Так никто и не утверждает, что в данной конкретной DLL используется многопоточность. Более того, никто не утверждает что её функции потоконебезопасны. Аффтар просто бредит. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2019, 14:51 |
|
|
start [/forum/topic.php?fid=16&fpage=10&tid=1339977]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 232ms |
total: | 386ms |
0 / 0 |