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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2010, 16:55   #1
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию Вывод горизонтальных линий на экран [Delphi]

Здравствуйте уважаемые эксперты! Есть задача: Все потоки выводят на экран горизонтальную линию. Вот получившийся код:
Код:
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;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

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

implementation

{$R *.dfm}

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

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

procedure TForm1.Button1Click(Sender: TObject);
begin
  Time:=StrToInt(Edit1.Text)*1000000;
  Handles[0]:=CreateThread(nil, 0, @FirstHandle, nil, CREATE_SUSPENDED, ThreadID1);
  Handles[1]:=CreateThread(nil, 0, @SecondHandle, nil, CREATE_SUSPENDED, ThreadID2);
  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[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;
  ResumeThread(Handles[0]);
  ResumeThread(Handles[1]);
  CloseHandle(Handles[0]);
  CloseHandle(Handles[1]);
end;

end.
Проблема в том, что программа не всегда работает корректно, т.е. то линии до конца не доходят, то 2-ой поток пересекается с первым.. Помогите найти ошибку, заранее огромное спасибо. Проект прикрепляю.
Вложения
Тип файла: rar 3.rar (178.6 Кб, 8 просмотров)
StudeHt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод на экран символов дельта и сигма (Delphi) Alfik Помощь студентам 12 19.10.2014 10:05
вывод на экран Nikolai_90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 02.05.2012 09:25
Вывод на экран Timpi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 30.11.2009 18:05
Вывод на экран Rifler Паскаль, Turbo Pascal, PascalABC.NET 10 18.07.2008 18:30
Вывод на 2-ой экран DShiller Общие вопросы Delphi 0 26.05.2008 15:25