Форум: "WinAPI";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];
Вниз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.
и тоже самое тока так :
От самой Dll-ки это не зависит. ответ похоже сидит в маленьком модуле Forms, тока смотреть его лень :) Идеи есть?
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.
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c