Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.30;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.017 c
1-98177
Dynamit
2002-09-16 14:45
2002.09.30
Ошибка выгрузки DLL


4-98399
Rebenok Kirill
2002-08-12 17:29
2002.09.30
Работа с текстом в чужих окнах


7-98381
BY_KAN
2002-07-22 03:19
2002.09.30
НЕ ПАШЕТ AX=7305h INT 21h Абсол. чтен/запись


14-98359
nick_sniper
2002-09-06 03:00
2002.09.30
И внимательно следит за передвижениями курсора мыши


1-98174
PSERG
2002-09-18 10:24
2002.09.30
EhLib 2.0 Error!