Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.


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


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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
3-9694
Patrick
2002-06-10 13:49
2002.07.04
BLOB как параметр UDF


7-10035
Kate
2002-04-10 10:44
2002.07.04
ComPort


14-9970
SleD
2002-06-02 14:41
2002.07.04
Вопрос к участникам Spedia


8-9925
Aleksei
2002-02-25 00:28
2002.07.04
Помогите с SF2


3-9758
Yuri Btr
2002-06-12 12:56
2002.07.04
UPDATE для всей таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский