Главная страница
    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.005 c
3-9703
matvey
2002-06-10 21:12
2002.07.04
Запись после выборки


3-9724
Виталий Панасенко
2002-06-11 08:47
2002.07.04
UPDATE дной таблице по друго с использованием SQL


6-9940
Timon
2002-04-23 15:04
2002.07.04
Прокси сервер


3-9700
Sour
2002-06-10 17:23
2002.07.04
IBServer.


1-9798
kirilll
2002-06-24 02:17
2002.07.04
куда сохранить данные





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский