Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 18:29   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Threads

Подскажите что я не так сделал? Почему не работает как нужно? Уже 3 дня бьюсь с утра до вечера над этой делемой. (Ресурс - Label1, 4 потока должны работать с ним через критические секции)
Код:
//подключаемый модуль
Type
  TThreadByAlex=class(TThread)
  protected
  procedure Execute; override;
  public
  Fwork:string;
  property work:string read Fwork write fwork;
end;

Type
  TThreadByAlex2=class(TThreadByAlex)
  protected
  procedure Execute; override;
end;

Var
  AlexThreads:TThreadByAlex;
  Res:array [1..3] of byte;
  AlexThreads2:TThreadByAlex2;

implementation

Uses Unit1, Math, SysUtils;

procedure TThreadByAlex.Execute;
Var
i,j,k:integer;
begin
While not Terminated do
begin
Res[1]:=1;
If Cs[Res[1]].Active=true then
begin
AlexThreads.work:=Wait+IntToStr(Res[1]);
Form1.label12.Caption:=AlexThreads.work;
end
else
begin
PostMessage(Form1.Handle,Mess,1,res[1]);
Cs[Res[1]].Active:=true;
Cs[res[1]].Enter;
For i:=1 to 10 do
For j:=1 to 255 do
For k:=1 to 255 do
begin
labels[res[1]].Color:=Colors[1];
end;
Sleep(1000);
Cs[res[1]].Leave;
CS[res[1]].Active:=false;
end;
end;
end;

procedure TThreadByAlex2.Execute;
Var
i,j,k:integer;
begin
While not Terminated do
begin
Res[2]:=1;
If Cs[Res[2]].Active=true then
begin
AlexThreads2.work:=Wait+IntToStr(Res[2]);
Form1.label22.Caption:=AlexThreads2.work;
end
else
begin
PostMessage(Form1.Handle,Mess,1,res[1]);
Cs[Res[2]].Active:=true;
Cs[res[2]].Enter;
For i:=1 to 10 do
For j:=1 to 255 do
For k:=1 to 255 do
begin
labels[res[2]].Color:=Colors[2];
end;
Cs[res[2]].Leave;
CS[res[2]].Active:=false;
sleep(1000);
end;
end;
end;

//и главная форма
procedure TForm1.TakeMSG(Var msg:Tmessage);
Var i,j:integer;
begin
For i:=1 to 3 do
If (msg.WParam=1) and (msg.LParam=i) then
begin
AlexThreads.work:=Working+IntToStr(msg.LParam);
Form1.label12.Caption:=Working+IntToStr(msg.LParam);
end;
For i:=1 to 3 do
If (msg.Wparam=2) and (msg.LParam=i) then
begin
AlexThreads2.work:=Working+IntToStr(msg.LParam);
Form1.label22.Caption:=Working+IntToStr(msg.LParam);
end;
end;
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
threads indy delphi sokolv Фриланс 6 12.05.2010 14:44
Вопрос по потокам(Threads) Gwyllum Win Api 1 12.04.2010 15:58
Qt, Threads, Sockets... i-cpp Qt и кроссплатформенное программирование С/С++ 1 30.03.2010 02:10
Posix Threads Ghevond20 Общие вопросы C/C++ 0 12.12.2009 01:31