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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2010, 14:30   #1
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
Плохо Потоки

Здравствуйте уважаемые эксперты! Есть код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Edit1: TEdit;
    Label1: TLabel;
    BitBtn1: TBitBtn;
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    RadioGroup3: TRadioGroup;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Time:integer;
  Handles: array[0..2] of THandle;
  ThreadID1,ThreadID2,ThreadID3:Cardinal;

implementation

{$R *.dfm}

procedure FirstHandle;
var x,y,x1,i:integer;
begin
  x:=0;
  y:=100;
  while x<750 do
    begin
      x1:=x;
      Inc(x);
      Form1.Image1.Canvas.Pen.Color:=clBlack;
      Form1.Image1.Canvas.MoveTo(x1,y);
      Form1.Image1.Canvas.LineTo(x,y);
      for i:=1 to Time do;
    end;
end;

procedure SecondHandle;
var x,y,x1,i:integer;
begin
  x:=0;
  y:=150;
  while x<750 do
    begin
      x1:=x;
      inc(x);
      Form1.Image1.Canvas.Pen.Color:=clRed;
      Form1.Image1.Canvas.MoveTo(x1,y);
      Form1.Image1.Canvas.LineTo(x,y);
      for i:=1 to Time do;
    end;
end;

procedure ThirdHandle;
var x,y,x1,i:integer;
begin
  x:=0;
  y:=200;
  while x<750 do
    begin
      x1:=x;
      inc(x);
      Form1.Image1.Canvas.Pen.Color:=clAqua;
      Form1.Image1.Canvas.MoveTo(x1,y);
      Form1.Image1.Canvas.LineTo(x,y);
      for i:=1 to Time do;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    Time:=StrToInt(Edit1.Text)*1000000;
  except on EConvertError do
    begin
      MessageDlg('Не корректный ввод!',mtError,[mbOk],0);
      Exit;
    end;
  end;
  Handles[0]:=CreateThread(nil, 0, @FirstHandle, nil, CREATE_SUSPENDED, ThreadID1);
  Handles[1]:=CreateThread(nil, 0, @SecondHandle, nil, CREATE_SUSPENDED, ThreadID2);
  Handles[2]:=CreateThread(nil, 0, @ThirdHandle, nil, CREATE_SUSPENDED, ThreadID3);
  case RadioGroup1.ItemIndex of
    0: SetThreadPriority(Handles[0],Thread_Priority_Time_Critical);
    1: SetThreadPriority(Handles[0],Thread_Priority_Highest);
    2: SetThreadPriority(Handles[0],Thread_Priority_Above_Normal);
    3: SetThreadPriority(Handles[0],Thread_Priority_Normal);
    4: SetThreadPriority(Handles[0],Thread_Priority_Below_Normal);
    5: SetThreadPriority(Handles[0],Thread_Priority_Idle);
  end;
  case RadioGroup2.ItemIndex of
    0: SetThreadPriority(Handles[1],Thread_Priority_Time_Critical);
    1: SetThreadPriority(Handles[1],Thread_Priority_Highest);
    2: SetThreadPriority(Handles[1],Thread_Priority_Above_Normal);
    3: SetThreadPriority(Handles[1],Thread_Priority_Normal);
    4: SetThreadPriority(Handles[1],Thread_Priority_Below_Normal);
    5: SetThreadPriority(Handles[1],Thread_Priority_Idle);
  end;
  case RadioGroup3.ItemIndex of
    0: SetThreadPriority(Handles[2],Thread_Priority_Time_Critical);
    1: SetThreadPriority(Handles[2],Thread_Priority_Highest);
    2: SetThreadPriority(Handles[2],Thread_Priority_Above_Normal);
    3: SetThreadPriority(Handles[2],Thread_Priority_Normal);
    4: SetThreadPriority(Handles[2],Thread_Priority_Below_Normal);
    5: SetThreadPriority(Handles[2],Thread_Priority_Idle);
  end;
  ResumeThread(Handles[0]);
  ResumeThread(Handles[1]);
  ResumeThread(Handles[2]);
  CloseHandle(Handles[0]);
  CloseHandle(Handles[1]);
  CloseHandle(Handles[2]);
end;

end.
Программа выводит горизонтальные линии на экран. Как сделать так, чтобы в один момент времени работал только один поток?
StudeHt вне форума Ответить с цитированием
Старый 06.05.2010, 16:26   #2
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Помогите пожалуйста, очень надо! При одинаковых приоритетах потов, должно быть что-то вроде этого:
Изображения
Тип файла: jpg 2010-05-06_162454.jpg (25.6 Кб, 70 просмотров)
StudeHt вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
потоки tanek Помощь студентам 6 15.03.2010 21:42
потоки Владимир1988 Помощь студентам 0 08.02.2010 23:12
Потоки AidarBik Win Api 2 04.08.2008 10:00