Вниз
Скачать: CL | DM;

---|Ветка была без названия|---   Найти похожие ветки 

← →
NetBreaker666 ©   (2002-09-02 23:16) [0]

Вообщем можно ли реализовать CriticalSection не для разных Thread"Ов, а для разных процессов.
Т.Е. есть DLL"ка, можно ли сделать так, что"б кусок кода исполнялся одновременно только в одном процессе ?? (Я использую FileMapping и возможны проблемы с синхронизацией).
Пока обхожусь:
Asm
CLI
end;
...
Asm
Sti
End;

-Чуть-чуть помогает в Win9x,но под Win2000/XP работать вряд ли будет.
Просьба не предлагайте для этого использовать очереди в FileMapping"e - попытался - теперь гемор разгребаю.


← →
NetBreaker666 ©   (2002-09-02 23:45) [1]

FUCK !!!!
На Cli, Sti Винды выдают : Previliged Instruction !
Как еще от этого избавиться можно ??? Если прогу из под ДОС"а запускать, таких проблем не возникает !


← →
[NIKEL] ©   (2002-09-03 00:44) [2]

1. Критические секции используются только для синхронизации нитей одного процесса

2. Причем здесь ДОС???


← →
NetBreaker666 ©   (2002-09-03 01:02) [3]

2NIKEL:
1. Я знаю, что критичекские секци используются для синхронизации нитей одного процесса. Вот я и спрашиваю, как синхронизироваить процессы.Т.Е. есть DLL"ка, можно ли сделать так, что"б кусок кода мог исполняться одновременно только в одном процессе ??

2. Обхясняю. Для задачи N1 я попытался использовать инструкции CLI (запрет немаскируемых прерываний) и STI (снятие этого запрета). Под Досом и Вин9х все работает, а под 2000/ХР - вызывается исключение "Исполнение Привелигированой инструкции".

Вопрос: Каким макарои осуществить [1] или избежать [2] ???



← →
NetBreaker666 ©   (2002-09-03 01:04) [4]

P.S.
CLI и STI я хотел использовать для запрета переключения задачи (процессора, конечно).


← →
[NIKEL] ©   (2002-09-03 01:12) [5]

Строй логику для DLL`ки при DLL_PROCESS_ATTACH, разрешай аттач или запрещай


← →
Mystic ©   (2002-09-03 06:53) [6]

Критические секции
==================

InitializeCriticalSection(C)

try
EnterCreticalSection(C)
finally
LeaveCriticalSection(C);
end;

DeleteCriticalSection(C);






Мьютексы
========

hMutex := CreateMutex(nil, False, "Unique mutex name"); // InitializeCriticalSection

try
WaitForSingleObject(hMutex, INFINITE); //Enter CriticalSection
finaly
ReleazeMutex(hMutex); // LeaveCriticalSection
end;

CloseHandle(hMutex); // DeleteCriticalSection





Могу где ошибаться, пишу с листа без проверки

Замечания: CreateMutex --- первый параметр неважен, второй --- занят
ли мьютекс после создания (если True то это все равно, что
CreateMutex(nil, False, ...) + WaitForSingleObject

WaitForSingleObject --- ожидаем, когда mutex освободиться и
захватываем его. INFINITE --- ждем бесконечность. Можно указать время
в мс, тогда надо проверять результат на тайм-аут.

ReleazeMutex --- Освободить mutex

CloseHandle --- уничтожить mutex



--------
Вечером очень вкусно, наутро - полный эффект! (из рекламы слабительного).


← →
Alx2 ©   (2002-09-03 07:37) [7]

Например, используй объекты ядра: события (event), мьютексы(mutex), семафоры (semaphore)


← →
DiamondShark ©   (2002-09-03 11:24) [8]

Аналогом критической секции для межпроцессного взаимодействия являются мьютексы


← →
NetBreaker666 ©   (2002-09-03 20:40) [9]

Thak You guys !!!
Very much.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.015 c
1-98078
nikolo
2002-09-19 15:15
2002.09.30
TStringList в динамическом массиве


14-98338
?
2002-09-05 22:42
2002.09.30
IP


3-97988
sanilo
2002-09-10 09:43
2002.09.30
Вот такой ламерский вопросик:)


4-98414
anod
2002-08-13 12:28
2002.09.30
КАк установить высоту окна


8-98228
Groove
2002-06-01 14:15
2002.09.30
Кнопочки из Flash




   Наверх