Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.04;
Скачать: CL | DM;

Вниз

DLL, 2 потока и List   Найти похожие ветки 

 
Andrey-k ©   (2002-04-28 23:02) [0]

Подскажите. Два процесса имеют по потоку из которых идет обращение к DLL-ке. DLL-ка выполняет роль посредника при передаче данных (передает указатели на Listы). Возможно ли:
лист созданный в первом потоке и засунутый в DLL фрикнуть во втором потоке предварительно разобрав содержимое?
Корректно ли это? И нужно ли использовать мьютексы?

В DLL сделан файл отображаемый в память.


 
Digitman ©   (2002-04-29 08:39) [1]

Достаточно использовать класс TThreadList. Объект синхронизации critical section в него уже встроен Борландом.


 
rastochnik ©   (2002-04-29 12:48) [2]

мне кажется, здесь нужно внимательно: через dll идут указатели (как ты говориш) или данные


 
Andrey-k ©   (2002-05-05 17:34) [3]

Мужики! Сорри что долго не отвечал по DLL. я погряз в след проблеме : как известно 2 процесса используют одну DLL, то они имеют одинаковые хандлы на нее , тогда почему хандл разный в след случаях:


program Project2;
uses
Windows,
Forms;
// U_Main in "U_Main.pas" {Form1};

{$R *.res}
var
xHandle:THandle; //DLL handle

begin
xHandle:=LoadLibrary(PChar("H:\Dll_Map.dll"));
Application.Initialize;
Application.Run;
end.


и тоже самое тока так :


program Project2;
uses
Windows;
// Forms;
// U_Main in "U_Main.pas" {Form1};


{$R *.res}
var
xHandle:THandle; //DLL handle

begin
xHandle:=LoadLibrary(PChar("H:\Dll_Map.dll"));
{Application.Initialize;
Application.Run;}
end.
От самой Dll-ки это не зависит. ответ похоже сидит в маленьком модуле Forms, тока смотреть его лень :) Идеи есть?


 
Andrey-k ©   (2002-05-05 17:51) [4]

А отсюда вопрос rastochnika по тому что идет через DLL
указатели или данные уже не имеет значение... тк я не вижу ни того ни другого.
Хотя возникает еще вопрос - сможет ли 2-ой процесс высвободить
память(по указателям листа) которая была выделена в первом :) Мне кажется необходимо гнать данные в DLL.

И освобождать уже в DLL соответственно по команде 2-го процесса.


 
troits ©   (2002-05-06 13:17) [5]


> Andrey-k © (05.05.02 17:34)
> как известно 2 процесса используют одну DLL, то они имеют ?>одинаковые хандлы на нее

Почему? IMHO вовсе нет. Использовать указатели в другом процессе тоже нельзя.


 
Andrey-k ©   (2002-05-06 23:22) [6]

Насчет указателей согласен
даже если они переданы через файл отображаемый в памяти, тк данные эти другого процесса. OK я передаю данные.


Насчет хандлов
да хандлы разные могут быть. я вычитал, что это якобы из-за того "что DLL может быть перемещена в памяти одного из процессов или если каждый процесс переместил DLL по собственному базовому<-? адресу".

Тогда получается, что в выше приведенных кусках кода
происходит перемещение DLL во втором случае (еще вопрос в каком случае). И уже о доступе к общим данным (через MapViewOfFile ) нет речи. Вопрос - По ЧЕму идет перемещение?


 
troits ©   (2002-05-07 14:08) [7]

Да нет никакого перемещения(то есть то, что оно есть, в данном случае неважно). Хэндл - это просто индекс в таблице, который назначается системой из своих, вообще говоря, не существенных, соображений. При загрузке код и данные DLL отображается в адресное пространство загружающего процесса. Они имеют смысл только для этого процесса. Дальше: для межпроцессного взаимодействия существует куча способов, один из которых - файлы, проецируемые в память -(CreateFileMapping/MapViewOfFile). При этом физически один файл проецируется в адресные пространства процессов и таким образом можно разделять данные между ними. Вот, собственно, и все.

Прошу прощения, если говорю очевидные вещи, просто у меня сложилось впечатление, что вы этого не понимаете.



 
troits ©   (2002-05-07 14:14) [8]

А вообще, лучше бы тему назвать
DLL, List и 2 потока ;)


 
Andrey-k ©   (2002-05-08 00:05) [9]

Mojete ne izveniatcia - ia eto ponimau za isklycheniem "физически один файл >проецируется< в адресные пространства процессов " - ix che yje stanovitcia dva?

i bydet li v etom slychae tochno ykazatel na obshyu pamiat ravnim dlia oboix processov - ne bydet , ia proveril, zapystiv dva prilojenia odnovremenno v otladke!

i bilo sozdano 2 faila otobrajaemix v pamiat s raznimi ykazateliami vmesto odnogo!
bred da?
no ia eto videl....






Страницы: 1 вся ветка

Текущий архив: 2002.07.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
14-9995
Snake bite
2002-06-02 12:12
2002.07.04
Нароооооод помогите.


1-9827
TsvIlya
2002-06-24 14:35
2002.07.04
Писать текст в чужой проге


1-9892
Blast
2002-06-22 09:18
2002.07.04
Создание меню в Run-Time


3-9719
realship
2002-06-11 12:34
2002.07.04
Перевод программы на ADO....ошибка


1-9829
Геннадий Милехин
2002-06-24 17:59
2002.07.04
Как подключить Help по F1 для RXLIB 2.75