Форум: "Потрепаться";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Вниз---|Ветка была без названия|--- Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c