Здравствуйте, скажите пожалуйста, можете ли вы помочь мне найти ошибку в коде, уже по всякому пыталась исправить программу, ничего не помогает, я просто в Паскале только новичок, поэтому самостоятельно никак не получается сделать программу рабочей. Я написала программу - счетчик с использованием семафор для параллельного ее запуска, но дело в том ,что если запустить программу один раз, она считает все верно, а если одновременно 2 раза, то совсем ничего не считает....что-то в ней не так..вот код:

program Counter2;
uses
crt;
const
SemaphoreFile = 'Semaphore.txt';
var
x:integer;
procedure Enter_Critical_Section;
begin
repeat
{$I-}
mkdir(SemaphoreFile);
{$I+}
until IOResult = 0;
end;

procedure Leave_Critical_Section;
begin
rmdir(SemaphoreFile);
end;

procedure Counter;
const
CounterFileName = 'Counter.txt';
var
s:text;
rujuk:integer;
begin
Enter_Critical_Section;
begin
Assign (s,'rujuk.txt');
{$I-}
reset(s);
{$I+}
If IOResult=0
Then

begin
reset(s);
read(s,x);
close(s)
end
else
begin
rewrite(s);
x:=0;
end;
inc (x);
rewrite(s);
write(s,x);
close(s);
writeln('Kolichestvo obrashcheniy=',x);

end;
Leave_Critical_Section;
writeln('Kolichestvo obrashcheniy=',x);
end;

begin
for x:=1 to 1000 do Counter;
repeat until KeyPressed;
end.

@музыка: Гала-радио

@настроение: Прекрасное, но если заработает программа, будет лучше

@темы: паскаль

Комментарии
08.06.2009 в 02:23

Ау! Тут вообще есть кто-нибудь?!
08.06.2009 в 07:30

Я знаю, что я гений, но мне от этого ничуть не легче.
Izzie а что не работает-то? не компилируется? Может в процедуре Counter надо вместо переменной rujuk объявить x?
08.06.2009 в 12:11

работать должно так: изначально была обычная программа, которая считала количество обращений и создавала мне файл текстовый с этим кол-вом, но если ее запускать параллельно, то она считала неправильно, ну на это есть причины, чтобы избежать неправильности подсчета, я вставила критические секции, но теперь при параллельном запуске она совсем ничего не считает и файла тоже не создает...я где-то с семафорами напартачила...
08.06.2009 в 12:22

Я знаю, что я гений, но мне от этого ничуть не легче.
а в чем эта программа запускается?
08.06.2009 в 13:56

в rg.exe
08.06.2009 в 15:22

Я знаю, что я гений, но мне от этого ничуть не легче.
не знаю, что такое rg.exe, но ошибка в теле процедуры Counter. Надо в ней везде заменить x на rujuk.


08.06.2009 в 15:36

сейчас попробую
08.06.2009 в 15:42

да, теперь она уже считает...но файл не создает...:bricks:
08.06.2009 в 15:59

Я знаю, что я гений, но мне от этого ничуть не легче.
какой файл? у меня все создается вроде
08.06.2009 в 16:08

должен создаваться rujuk.txt , если запускать одновременно эту программу 2 раза то в этом созданном файле должно быть число 2000
08.06.2009 в 16:27

Я знаю, что я гений, но мне от этого ничуть не легче.
у меня так и происходит.
Может ты его не там ищешь?
08.06.2009 в 16:28

он должен создаваться в той же папке, где и сама программа, а через что ты запускаешь?
08.06.2009 в 16:40

Я знаю, что я гений, но мне от этого ничуть не легче.
я программу компилирую ТурбоПаскалем и запускаю exe-шник.
08.06.2009 в 16:45

Все спасибо, все считает, только файл создается в другой папке. Наконец-то я разобралась с ней, спасибо :pozdr3:
08.06.2009 в 16:48

Я знаю, что я гений, но мне от этого ничуть не легче.
Izzie Впредь будь поаккуратнее с глобальными переменными :)