Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

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

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

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
Репутация: 16
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




14:20.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru