Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
6-98249
Askar
2002-07-31 09:56
2002.09.30
Web Brower


1-98167
kex86
2002-09-16 01:48
2002.09.30
KbLayout


14-98334
Сатир
2002-09-05 18:47
2002.09.30
Асм


1-98217
delpher_gray
2002-09-18 19:57
2002.09.30
Как не допустить закрытие консольного приложения ?


1-98104
Донской
2002-09-19 19:21
2002.09.30
Ошибка в режиме написания кода





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