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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 20:38   #1
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость Изменение позиции ProgressBar при загрузке

Как вовремя увеличения позиции прогрессбара("загрузка" часто так организована) выполнять какие то действия.

Пример:
Увеличиваем позицию бара:
Код:
i:=1;
while true do
 begin
    ProgressBar1.Position:=ProgressBar1.Position+i;
    sleep(1000);
    if ProgressBar1.Position=ProgressBar1.Max then   break;
 end;
Заносим цифры в мемо(1..100)
Код:
 for I := 1 to 100 do
begin
 memo1.lines.add(inttstr(i));
 sleep(1000);
end;
Результатом программы должно быть : при каждой новой секунде изменялся ПРбар + добавлялося число в мемо!
если мы просто напишем вышеуказаные функи, то ети два процеса будут выполняться последовательно, меня же интересует паралельно, жду советов
Lemo вне форума Ответить с цитированием
Старый 12.02.2010, 20:39   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Потоки? Не?
P.S. Не забывайте "освежать" прогрессбар.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 13.02.2010, 15:07   #3
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Можешь показать примером?!
или мой подправить:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


  tnew = class(tthread)
private
s: string;



protected
procedure ppp;
procedure LOL;
procedure execute; override;
end;




var
  Form1: TForm1;
  new1, new2: tnew;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
new1 := tnew.create(true);
new1.freeonterminate := true;
new1.s := '1 thread';
new1.priority := tplowest;
new1.resume;

new2 := tnew.create(true);
new2.freeonterminate := true;
new2.s := '2 thread';
new2.priority := tplowest;
new2.resume;

end;




procedure tnew.execute;
var i:integer;
begin



new1.ppp;
new2.LOL;

end;


procedure tnew.LOL;
var i:integer;
begin



i:=1;
while true do
 begin
    form1.ProgressBar1.Position:=form1.ProgressBar1.Position+i;
    sleep(100);
    if form1.ProgressBar1.Position=form1.ProgressBar1.Max then
    break;
 end;

end;

procedure tnew.ppp;
var i:integer;
begin
for i := 1 to 10 do
 begin
   form1.memo1.lines.add(inttostr(i));
   sleep(200);

 end;
end;

end.
ЗЫ:с многопоточностью сталкиваюсь в 1-й раз!
Lemo вне форума Ответить с цитированием
Старый 13.02.2010, 18:19   #4
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

ты пишешь, чтоб изменялось каждую секунду, а делаешь привязку к вычислительной мощности процессора, подход абсолютно неправильный!
для привязки ко времени используй Timer (и сразу отпадает необходимость потоков)
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 13.02.2010, 19:08   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Можно обойтись и без класса TThread - вызывать потоки через апи. Кидаем на форму Button, Memo и ProgressBar
Код:
procedure Proc1;
var
  i: byte;
begin
  form1.ProgressBar1.Position := 0;
  form1.ProgressBar1.Max := 10;
  for i := 1 to 10 do
  begin
    form1.ProgressBar1.Position:=form1.ProgressBar1.Position+1;
    sleep(1000)
  end;
  ExitThread(0)
end;

procedure Proc2;
var
  i: byte;
begin
  for i := 1 to 10 do
  begin
    form1.memo1.lines.add(inttostr(i));
    sleep(1000)
  end;
  ExitThread(0)
end;

procedure TForm1.Button1Click(Sender: TObject);
var  
  th1, th2: cardinal;
begin  
  createthread(nil,128,@proc1,self,0,th1);
  createthread(nil,128,@proc2,self,0,th2);
end;
Для создания потока здесь используется всего одна функция createthread
eoln вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение позиции form1 mosq Общие вопросы Delphi 13 07.02.2010 16:41
Изменение позиции TrackBar при нажатии Button Arxangelname Общие вопросы Delphi 2 10.11.2009 12:50
БАГ при загрузке!!! Tatyana_777 Операционные системы общие вопросы 8 11.03.2009 09:51
ОШИБКА ПРИ ЗАГРУЗКЕ Костян Пират Операционные системы общие вопросы 5 21.02.2009 12:14
Ошибка при загрузке.... Ronni10 Операционные системы общие вопросы 6 10.01.2008 22:20