Вниз
Скачать: 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.013 c
6-98245
^SANYA
2002-07-30 01:18
2002.09.30
Sockets....


1-98216
Dmitriy Polskoy
2002-09-18 14:28
2002.09.30
MDI приложение


1-98068
Лана Розанова
2002-09-19 08:14
2002.09.30
Handle


1-98086
Magic
2002-09-19 14:59
2002.09.30
Конечный автомат


14-98299
AL2002
2002-09-03 12:54
2002.09.30
Чем править RTF файлы, которые для хелпа




   Наверх