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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2007, 11:59   #1
metamfetamin
Пользователь
 
Аватар для metamfetamin
 
Регистрация: 02.11.2007
Сообщений: 68
По умолчанию В среде Delphi составить программу (процесс), который паралельно запускает два потока (нити)

Люди добрые помогите разобратся!!!!!
Короче есть готовый листинг, писать ничего ненадо, нужно части с етого листинга "позасовывать" в кнопки меню Form.

Код и условие!!!!!!!!!!
Тема: Процессы, потоки (нити)
Задание: В среде Delphi составить программу (процесс), который паралельно запускает два потока (нити)

Назначение программы:
При запуске программы кнопкой "Пуск", одновременно паралельно с задачей запускаются два потока Tthread1 и TThread2, которые пытаются установить "бегунок" в свою позицию (1-в позицию 10, 2-й в позицию 90)
У потоков можно менять приоритеты, и в зависимости от приоритета предпочтение отдается либо одному, либо другому потоку
При завершение программы потоки уничтожаются
6. Полный текст главного модуля формы (по тексту необходимо разобраться, какие компоненты участвуют)

Код:
unit Unit1; 
interface 
uses 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
StdCtrls; 
type 
TForm1 = class(TForm) 
GroupBox1: TGroupBox; 
GroupBox2: TGroupBox; 
RadioButton1: TRadioButton; 
RadioButton2: TRadioButton; 
RadioButton3: TRadioButton; 
RadioButton4: TRadioButton; 
RadioButton5: TRadioButton; 
RadioButton6: TRadioButton; 
Button1: TButton; 
ScrollBar1: TScrollBar; 
procedure Button1Click(Sender: TObject); 
procedure RadioButton1Click(Sender: TObject); 
procedure RadioButton2Click(Sender: TObject); 
procedure RadioButton3Click(Sender: TObject); 
procedure RadioButton4Click(Sender: TObject); 
procedure RadioButton5Click(Sender: TObject); 
procedure RadioButton6Click(Sender: TObject); 
procedure FormDestroy(Sender: TObject); 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 
//поток1 
TThread1 = class(TThread) 
private 
{ Private declarations } 
protected 
procedure Execute; override; 
procedure DoSomething;
end; 
//поток2 
TThread2 = class(TThread) 
private 
{ Private declarations } 
protected 
procedure Execute; override; 
procedure DoSomething; 
end; 
var 
Form1: TForm1; 
T1:TThread1; 
T2:TThread2; 
implementation 
{$R *.DFM} 
//тело потока 
procedure TThread1.Execute; 
begin 
repeat 
Synchronize(DoSomething); //синхронизирует поток с программой 
until terminated; 
end; 
procedure TThread1.DoSomething; 
begin 
Form1.ScrollBar1.Position:=10; 
end;
procedure TThread2.Execute; 
begin 
repeat 
Synchronize(DoSomething); 
until terminated; 
end; 
procedure TThread2.DoSomething; 
begin 
Form1.ScrollBar1.Position:=90; 
end; 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
T1:=TThread1.Create(false); //создать поток1 
T2:=TThread2.Create(false); //создать поток2 
RadioButton2.Checked:=true; // прио tpNormal 
RadioButton5.Checked:=true; // прио tpNormal 
Button1.Enabled:=false; v 
end; 
procedure TForm1.RadioButton1Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T1.Priority:=tpLowest; 
RadioButton6.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton2Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T1.Priority:=tpNormal; 
RadioButton6.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton3Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin
T1.Priority:=tpHighest ; 
RadioButton6.Enabled:=false; 
end; 
end; 
procedure TForm1.RadioButton4Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T2.Priority:=tpLowest ; 
RadioButton3.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton5Click(Sender: TObject); 
beg
if (sender as TRadioButton).Checked then 
begin 
T2.Priority:=tpNormal; 
RadioButton3.Enabled:=true; 
end; 
end; 
procedure TForm1.RadioButton6Click(Sender: TObject); 
begin 
if (sender as TRadioButton).Checked then 
begin 
T2.Priority:=tpHighest; 
RadioButton3.Enabled:=false; 
end; 
end; 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
T1.Suspend; T2.Suspend; 
T1.Terminate; T1.Free; 
T2.Terminate; T2.Free; 
end; 
end.

Последний раз редактировалось SuperVisor; 02.11.2007 в 14:41.
metamfetamin вне форума Ответить с цитированием
Старый 02.11.2007, 12:10   #2
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

http://www.sdteam.com/?tid=386
читай, в конце статьи есть хороший пример, как раз тебе подойдет. Или мне за вас всё надо решить
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 02.11.2007, 14:13   #3
metamfetamin
Пользователь
 
Аватар для metamfetamin
 
Регистрация: 02.11.2007
Сообщений: 68
По умолчанию

Цитата:
Сообщение от OrdJONY Посмотреть сообщение
http://www.sdteam.com/?tid=386
читай, в конце статьи есть хороший пример, как раз тебе подойдет. Или мне за вас всё надо решить
Все равно немогу сообразить что к чему.....немогу понять какие именно части с листинга в какую кнопку вставлять??????
metamfetamin вне форума Ответить с цитированием
Старый 02.11.2007, 14:40   #4
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Создаем новую прграмму, добавляем на форму вот эти элементы:
Код:
GroupBox1: TGroupBox; 
GroupBox2: TGroupBox; 
RadioButton1: TRadioButton; 
RadioButton2: TRadioButton; 
RadioButton3: TRadioButton; 
RadioButton4: TRadioButton; 
RadioButton5: TRadioButton; 
RadioButton6: TRadioButton; 
Button1: TButton; 
ScrollBar1: TScrollBar;
Только не перепутай радиобаттоны - каждая должна лежать в своем груп боксе.
Удаляем весь текст в своем юните и вставляем тот код, который ты выложил. После начинаем синхронизировать объекты с событиями
//RadoiButton3->OnClick = RadioButton3Click

Ах, да... Сделай так, чтобы ползунок был на 50%, а каждый из потоков прибавлял/убавлял по проценту. (Или использовать 1000000, как максимальное положение ползунка, а шаг в 1 - тогда наблюдать интереснее, а еще лучше, если число шага будет генерится автоматически в диапазоне от 1 до 50 - тогда будет война потоков... А если это изобразить графически - получим что-то напоминающее игру "Война вирусов" ))))
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 02.11.2007 в 14:50.
SuperVisor вне форума Ответить с цитированием
Старый 02.11.2007, 15:19   #5
metamfetamin
Пользователь
 
Аватар для metamfetamin
 
Регистрация: 02.11.2007
Сообщений: 68
По умолчанию

1. Ползунок на середину поставил.
2.А где менять значение???? в потоках?????а где имено???? чтоб было прибавление или убавление по проценту.?????
Я извеняюсь может быть за глупый вопрос но что значит синхронизировать????? Обьясните более подробно!!!!!

Последний раз редактировалось metamfetamin; 02.11.2007 в 15:33.
metamfetamin вне форума Ответить с цитированием
Старый 02.11.2007, 15:40   #6
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Цитата:
Сообщение от metamfetamin Посмотреть сообщение
А где менять значение???? в потоках?????а где имено????
Код:
procedure TThread1.DoSomething; 
begin 
//Менять здесь
end;
....
procedure TThread2.DoSomething; 
begin 
//И здесь
end;
Цитата:
Сообщение от metamfetamin Посмотреть сообщение
чтоб было прибавление или удаление по проценту.?????
В зависимости от потока.

Цитата:
Сообщение от metamfetamin Посмотреть сообщение
Я извеняюсь может быть за глупый вопрос но что значит синхронизировать????? Обьясните более подробно!!!!!
Это - не глупый вопрос, мой дорогой, это тупость, простите меня за выражение...
Код:
Until application.MessageBox('//RadoiButton3->OnClick = RadioButton3Click'),'THINK!!!!',MB_OK) <> IDCANCEL
Do application.MessageBox('I''m stupid piece of sheat'),'FUCK!!!!',MB_OK);
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 02.11.2007, 21:47   #7
metamfetamin
Пользователь
 
Аватар для metamfetamin
 
Регистрация: 02.11.2007
Сообщений: 68
По умолчанию

Все вроде бы работает, но есть парочка вопросов.

1. Как я понял кнопкой button1 мы запускаем ети потоки.

2. Зачем нам нужны кнопки radiobutton1,radiobutton2,radiobutt on3 и т.д. и почему если я пытаюсь поставить галочку на каком то из них и нажать button1 мне выдает ошибку Debugger Exception Notification, если же не выбирать ничего то оно само ставит галочку напротив radiobutton5, либо перекидывает автоматом на radiobutton5????

3. Зачем нужны кнопки GroupBox2,GroupBox3, так как в отличие от radiobutton1 на которую нажимаю то оно хоть птичку ставит то при нажатии на GroupBox не происходит ничего.

4. Как зделать что б скорость ползунка была не такая быстрая, что б было видно не вооруженным глазом, а то щас он летает из позиции так быстро что просто пипец!!!!!!!!!!!!!!! В опциях какой кнопки находится менюшка что отвечает за скорость ползунка????

Последний раз редактировалось metamfetamin; 03.11.2007 в 09:22.
metamfetamin вне форума Ответить с цитированием
Старый 03.11.2007, 09:25   #8
metamfetamin
Пользователь
 
Аватар для metamfetamin
 
Регистрация: 02.11.2007
Сообщений: 68
По умолчанию

Смотрел в опциях ScrollBar .......... вроде нету ничего такого после чего он бы замедлялся.

P.S. Не судите строго, Delphi не учил, поетому задаю может быть тупые вопросы!!!!!!!
metamfetamin вне форума Ответить с цитированием
Старый 04.11.2007, 21:27   #9
metamfetamin
Пользователь
 
Аватар для metamfetamin
 
Регистрация: 02.11.2007
Сообщений: 68
По умолчанию

Цитата:
Все вроде бы работает, но есть парочка вопросов.

1. Как я понял кнопкой button1 мы запускаем ети потоки.

2. Зачем нам нужны кнопки radiobutton1,radiobutton2,radiobutt on3 и т.д. и почему если я пытаюсь поставить галочку на каком то из них и нажать button1 мне выдает ошибку Debugger Exception Notification, если же не выбирать ничего то оно само ставит галочку напротив radiobutton5, либо перекидывает автоматом на radiobutton5????

3. Зачем нужны кнопки GroupBox2,GroupBox3, так как в отличие от radiobutton1 на которую нажимаю то оно хоть птичку ставит то при нажатии на GroupBox не происходит ничего.

4. Как зделать что б скорость ползунка была не такая быстрая, что б было видно не вооруженным глазом, а то щас он летает из позиции так быстро что просто пипец!!!!!!!!!!!!!!! В опциях какой кнопки находится менюшка что отвечает за скорость ползунка????
Знающие люди......помогите найти ответы!!!!
metamfetamin вне форума Ответить с цитированием
Старый 06.11.2007, 15:26   #10
metamfetamin
Пользователь
 
Аватар для metamfetamin
 
Регистрация: 02.11.2007
Сообщений: 68
По умолчанию

Короче все ясно, скорость бегунка зависит от мощности системы!!!!!Тема пока что закрыта!!!

Последний раз редактировалось metamfetamin; 06.11.2007 в 22:04.
metamfetamin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу сортировки Arsenal777 Помощь студентам 1 16.06.2008 16:46
Помогите составить программу neomaximus Помощь студентам 3 14.06.2008 10:40
Составить библиотечный модуль,который вычисляет умножение в 16-тиричной систему исчисления в паскале LLlM31b3 Помощь студентам 2 19.04.2008 19:08
Помогите составить программу через Delphi Рина8807 Помощь студентам 1 01.10.2007 19:59