Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
3-16075
jeka_t
2004-01-16 10:37
2004.02.06
TreeView & Table


14-16688
GSV_
2004-01-17 10:46
2004.02.06
Навеяно новогодними прогами.


1-16401
Dysan
2004-01-22 18:16
2004.02.06
криптография


7-16755
Lena_sv
2003-11-20 10:09
2004.02.06
разрешение экрана


4-16812
frost
2003-11-27 20:48
2004.02.06
Размер папки