Еще раз про использование VARPTR.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Еще раз про использование VARPTR.

Сообщение Mikle » 22.11.2008 (Сб) 19:06

В NET использование ссылки на переменную с использованием VARPTR (внешняя из DLL) использовать нельзя по причине работы менеджера памяти, который может произвольно переместить переменную в другое место. Точнее использовать можно через специальную обертку, как-то тут уже давали пример. Но мы же используем передачу переменных в DLL по ссылке (ByRef), что аналогично ByVal VARPTR. То есть, по крайней мере за время работы вызванной процедуры, адрес не сменится. Вопросы:
1. Может ли работа параллельно другого потока вызвать такую смену адреса? (Одсюда бы следовало, что при использовании мультипоточности нельзя вызывать внешние Native DLL с передачей параметра ByRef... :shock: )
2. Если ByRef безопасна, то безопасны ли такие варианты, как:
Код: Выделить всё
x=varptr(a)
f(x)' внешняя ф-ция

или это уже две разных команды, а между ними менеджер может сработать?
или так:
Код: Выделить всё
x=varptr(a)
.... математика без создания\удаления и вообще обращений к объектам, так же без DoEvents, например x=x+4
f(x)' внешняя ф-ция

3. Какие вообще возможны грабли при использовании одной внешней ф-ции в разных потоках одновременно? Естественно этим ф-циям я не буду передавать пересекающиеся области памяти, а как обстоит дело, например, с локальными переменными вызванной ф-ции? Может нужно объявлять для этого ф-цию для каждого потока отдельно, или принимать еще какие-либо меры?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Еще раз про использование VARPTR.

Сообщение tyomitch » 22.11.2008 (Сб) 20:15

Локальные переменные функции в любом случае хранятся в стеке, который у каждого потока свой.
Они никаких проблем в многопоточной проге вызывать не должны.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Еще раз про использование VARPTR.

Сообщение Mikle » 23.11.2008 (Вс) 11:10

А Static переменные?


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 84

    TopList  
cron