Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

Вопрос про мьютексы   Найти похожие ветки 

 
Zheks   (2004-01-27 10:31) [0]

Есть две программы. В обоих я создаю мьютекс с одинаковым именем. Задача программ поочереди дописывать значения в файл. Проблемма в том, что если я запускаю одну программу, то она не ждя вторую записывает ВСЕ свои значения, а должна ждать отработки второй программы.


 
Bel   (2004-01-27 10:54) [1]

А ты уверен, что создаёшь мьютексы с одинаковым именем? Винда не даст тебе создать второй мьютекс с таким же именем.


 
stas   (2004-01-27 11:07) [2]

Bel © (27.01.04 10:54) [1]
Помоему
она не даст, но и ошибки не выдаст


 
AKul   (2004-01-27 11:07) [3]


> Bel © (27.01.04 10:54) [1]
> Винда не даст тебе создать второй мьютекс с таким же именем.

Это не верно. Вызов функции CreateMutex с именем уже существующего Mutex"а (именно Mutex"а, а не другого объекта ядра), вернет описатель существующего Mutex"a (если, конечно первый Mutex создавался с определенными атрибутами доступа).


> Zheks © (27.01.04 10:31)

Покажи основные участки кода.


 
Erik   (2004-01-27 11:13) [4]

to stas
Как это даст?! Ты хочеш сказать, что одна из главных API функций синхронизации невоботает!!!!!! Сначало надо подумать а потом писать. Все отрабатывет коректно, необходимо проверять возвращаемый код ошибки.
Автору вопроса, зачем создовать второй мьютекс? Чем он может помочь? Как я думаю надо открывать его а не создовать. А еще лучше воспользоватся симафором.


 
Bel   (2004-01-27 11:16) [5]

> Вызов функции CreateMutex с именем уже существующего Mutex"а вернет описатель существующего Mutex"a

Виноват, был не прав. Ошибки не будет, только проверка GetLastError покажет, что он уже был.

В таком случае солидарен с > AKul © (27.01.04 11:07) [3]
> Покажи основные участки кода.


 
AKul   (2004-01-27 11:19) [6]


> Erik © (27.01.04 11:13) [4]


> Автору вопроса, зачем создовать второй мьютекс? Чем он
> может помочь?

Скорее всего, он имел в виду, что первое приложение создает мьютекс, а второе создает мьютекс с таким же именем (т.е. открывает его же).
Но об этом, конечно, лучше спросить у самого автора.


 
Stas   (2004-01-27 11:23) [7]

Erik © (27.01.04 11:13) [4]
> она не даст, но и ошибки не выдаст

Где ты видел даст ?
А ошибки явной не выдаст !


 
Zheks   (2004-01-27 11:28) [8]

h := CreateMutex(nil, False, "MyExampleMutexProgram");
if h = INVALID_HANDLE_VALUE then begin
ShowMessage("Не могу создать мьютекс");
Exit;
end;

for i := 1 to UpDownCount.Position do begin
if stop then
break;

.........................................

res := WaitForSingleObject(h, 20000);

if res = WAIT_TIMEOUT then begin
ShowMessage("Таймаут ожидания захвата мьютекса");
break;
end
else if res <> WAIT_OBJECT_0 then begin
ShowMessage("Ошибка доступа к мьютексу");
break;
end
else begin

Sleep(UpDownSleep.Position * 1000);
Application.ProcessMessages;

AssignFile(f, fn);
if FileExists(fn) then
Append(f)
else
Rewrite(f);
Write(f, "test");
CloseFile(f);

ReleaseMutex(h);

Sleep(UpDownSleep.Position * 1000);
end;
end;

CloseHandle(h);


 
Zheks   (2004-01-27 11:37) [9]

Вообще задача такая: Нужно что бы две программы поочереди писали в один файл.


 
Bel   (2004-01-27 11:43) [10]

Ну, вроде никакого криминала здесь нет. Единственное небольшое замечание: если CreateMutex не сможет создать/открыть мьютекс, она вернет NULL, а не INVALID_HANDLE_VALUE.


 
Digitman   (2004-01-27 12:18) [11]


> Zheks © (27.01.04 11:37) [9]
> Вообще задача такая: Нужно что бы две программы поочереди
> писали в один файл.


сегодня две, а завтра - косой десяток
может быть, есть смысл реализовать отдельный NT-сервис, который будет монопольно работать с файлом (осуществляя при этом арбитраж поступающих к нему запросов на запись в файл) и с которым будут общаться все будущие программы ?



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

Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.03 c
3-16125
Witcher
2004-01-15 16:03
2004.02.06
Как сконвертировать базу данных DBF в MDB (Access)?


14-16623
Daemys
2004-01-14 12:38
2004.02.06
Гуманизм и милосердие


1-16235
Serginio666
2004-01-26 19:38
2004.02.06
Вопрос по Хэлперам


1-16505
denis24
2004-01-27 13:03
2004.02.06
Кнопка mininize в заголовке формы


3-16198
AVP_opck
2004-01-13 08:57
2004.02.06
временная база данных





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