Текущий архив: 2004.01.29;
Скачать: CL | DM;
ВнизСинхронизация, семафор, мьютекс Найти похожие ветки
← →
lexx777 (2003-11-21 23:23) [0]Мне нужно выполнить следуюющее:
Есть 2 приложения.
Каждое приложение выполняет отчет до пяти, а затем ждет, пока и другое приложение сосчитает до пяти. Процесс повторяется снова и снова.
С помощью мьютекса синхронизация работает, а с семафором нет.
Вот код
...
var
Form1: TForm1;
hSemaphore : THandle;
f1: boolean;
zAppName: array[0..512] of char;
...
procedure TForm1.ButtonCreateSem2Click(Sender: TObject);
begin
StrPCopy(zAppName, "TestS");
hSemaphore:=CreateSemaphore(nil,1, 1, zAppName);
if hSemaphore = 0 then
begin
ShowMessage(SysErrorMessage(GetLastError));
exit
end;
Edit1.Text:= IntToStr(hSemaphore);
end;
procedure TForm1.ButtonStartShet2Click(Sender: TObject);
var z: byte;
begin
z:=0;
f1:= false;
While (not f1) do
begin
Memo1.Clear;
inc(z);
Memo1.Lines.Add(IntToStr(z));
Edit1.Text:= IntToStr(z);
Application.ProcessMessages;
Sleep(1000);
If (z Mod 5) = 0 then
begin
ReleaseSemaphore(hSemaphore, 1 , nil);
WaitForSingleObject(hsemaphore, INFINITE);
end;
End;
ReleaseSemaphore(hSemaphore, 1 , nil);
end;
procedure TForm1.ButtonStopSchet2Click(Sender: TObject);
begin
f1:=true;
end;
У обоих приложений код идентичен. Что я делаю не так?
← →
Nero Wolfe (2003-11-21 23:41) [1]Попробуй Linux поизучать... Что такое Pipe, семафоры Дейкстры, сообщения. Может, поможет ;)
← →
lexx777 (2003-11-22 00:26) [2]Советую почитать Э. Таненбаум "Совр. ОС", Дж. Рихтер Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows.
Maxwell? Linux Core Kernel Commentary.
← →
Игорь Шевченко (2003-11-22 01:08) [3]Попробуй
hSemaphore:=CreateSemaphore(nil, 0, 1, zAppName);
Страницы: 1 вся ветка
Текущий архив: 2004.01.29;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.006 c