Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
4-я лабораторная
Задание:
Модифицировать программу „Гонки” так, чтобы она работала правильно.
Ход работы:
· Открыли Delphi-проект Gonki.dpr.
· Инициировали в процедуре создания потоков критическую секцию функцией Win32 API InitializeCriticalSection(CS).
· Добавили в объявление переменных параметр CS, который представляет собой запись типа TRTLCriticalSection. Запись CS передается по ссылке.
· А теперь самое главное - объявли начало и конец критической секции. Понятно, что запись CS заполняет функцией Win32 API InitializeCriticalSection.
· И, наконец, когда запись CS не нужна, освободили занимаемую ею память.
· Сохранили приложение под именем CritSec, запустили его и увидели, что оно работает так, как мы его задумывали:
Листинг программы:
const
MaxSize = 128;
var
NextNumber: Integer = 0;
DoneFlags: Integer = 0;
GlobalArray: array[1..MaxSize] of Integer;
CS: TRTLCriticalSection;
function GetNextNumber: Integer;
begin
inc(NextNumber);
Result := NextNumber;
end;
procedure TFooThread.Execute;
var
i: Integer;
begin
OnTerminate := Form1.DispGlblArr;
EnterCriticalSection(CS);
for i := 1 to MaxSize do
begin
GlobalArray[i] := GetNextNumber;
Sleep(5);
end;
LeaveCriticalSection(CS);
end;
procedure TForm1.DispGlblArr(Sender: TObject);
var
i: Integer;
begin
inc(DoneFlags);
if DoneFlags = 2 then
begin // make sure both threads finished
for i := 1 to MaxSize do
Listbox1.Items.Add(IntToStr(GlobalArray[i]));
DeleteCriticalSection(CS); {OTL from hurry}
end;
end;
procedure TForm1.CreateThrd(Sender: TObject);
begin
InitializeCriticalSection(CS);
TFooThread.Create(False);
TFooThread.Create(False);
end;
end.
Результаты программы:
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.