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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 17:01   #1
Dmitriy90
 
Регистрация: 06.04.2012
Сообщений: 7
По умолчанию сортировка в параллельных потоках

Здравствуйте. Помогите пожалуйста с решением задачи.
Нужно разработать многопоточную программу для сравнения быстродействия двух методов сортировки - метода выбора и метода пузырька. Сортировки реализуются в двух одновременно работающих потоках. Объектом сортировки является массив случайных целых чисел
Dmitriy90 вне форума Ответить с цитированием
Старый 06.04.2012, 19:14   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Так а чем помочь-то?
Somebody вне форума Ответить с цитированием
Старый 06.04.2012, 19:38   #3
Dmitriy90
 
Регистрация: 06.04.2012
Сообщений: 7
По умолчанию

Я смог сделать 1 поток и в нем массив сортируется методом пузырька. Я не знаю как создать второй поток и заставить его работать параллельно первому.

вот то что я написал:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)

    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
//    procedure UpdateCaption;
  end;

var
  Form1: TForm1;
  MyThread: TMyThread;

  m:array[1..10] of integer;

implementation

{$R *.dfm}

{procedure TMyThread.UpdateCaption;
begin
  Form1.Caption:='Поток завершён';
end;
 }
procedure TMyThread.Execute;
var
 i,k,j:integer;
begin
 for j:=1 to 9 do
 for i:=1 to 9 do
  if m[i]>m[i+1] then
   begin
    k:=m[i];
    m[i]:=m[i+1];
    m[i+1]:=k;
   end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
begin
  randomize;
  for i:=1 to 10 do
   m[i]:=random(100);
  MyThread:=TMyThread.Create(False);
  MyThread.Priority:=tpNormal;
  MyThread.FreeOnTerminate:=true;

end;

end.

Последний раз редактировалось Stilet; 06.04.2012 в 20:14.
Dmitriy90 вне форума Ответить с цитированием
Старый 06.04.2012, 20:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Точно так же.
Описываешь такой же класс как и TMyThread, но с другим именем и другой начинкой в Execute. А в главной пиши
Код:
  MyThread:=TMyThread.Create(True);
  MyThread.FreeOnTerminate:=true;
  MyThread.Resume;

  MyThread2:=TMyThread2.Create(True);
  MyThread2.FreeOnTerminate:=true;
  MyThread2.Resume;
И твои потоки начнут отрабатывать
НО! Массив для каждого потока должен быть свой отдельный
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2012, 21:16   #5
Dmitriy90
 
Регистрация: 06.04.2012
Сообщений: 7
По умолчанию

спасибо за помощь
Dmitriy90 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas в потоках demigod82 Общие вопросы Delphi 9 05.03.2012 08:51
Определение количества параллельных портов CyberGirl Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 10.01.2012 12:34
Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы beavis1990 Общие вопросы C/C++ 4 20.08.2011 14:36
синхронизация в потоках xrob Общие вопросы Delphi 8 15.11.2010 17:25
о параллельных вычислениях motorway PHP 4 20.09.2009 18:22