Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

цыклы


ant_ ©   (2005-11-06 20:04:00) 

такая вот проблема у меня: пишу следуйщий цыкл,нормално работает.(prosto primer)

Button1;

for i:=1 to 100 do
label1.caption:=FloatToStr(i);
sleep(200);
application.processmessage;

но когда добавляю ешо один цыкл в туже кнопку,вот тогда и проблема появляется.а проблема в том что, при шелчке на эту кнопку,программа делает с перва один цыкл  когда она заканчивается, делает следуйешуйу. как можно зделать так чтоб при шелчке начались оба цыкла?
и вот другой вопрос: пока цыкл не закончевается,не возможно зактыть форму . как эту проблему решить?

P.S.izvenyayus za ruskiy.


SergP.   (2005-11-07 12:53:00) [1]


> ant_   (07.11.05 01:47) [3]
> esli ti ne zametil,ya izvenilsya, umnik!


Не надо нервничать....

Вот тебе пример (туповатый правды, но работающий, просто что-то нормальное долго писать...):


unit Unit1;

interface

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

type Tcycle1=class(TThread)
   public
   procedure Execute; override;
end;

type Tcycle2=class(TThread)
   public
   procedure Execute; override;
end;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Label1: TLabel;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure Tcycle1.Execute;
var
 i:integer;
begin
 for i:=1 to 100 do
 begin
   form1.label1.caption:=FloatToStr(i);
   form1.label1.update;
   sleep(200);
 end;
end;

procedure Tcycle2.Execute;
var
 i:integer;
begin
 for i:=1 to 100 do
 begin
   form1.label2.caption:=FloatToStr(i);
   form1.label2.update;
   sleep(180);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with Tcycle1.Create(true) do
 begin
   FreeOnTerminate:=true;
   Suspended:=false;
 end;
 with Tcycle2.Create(true) do
 begin
   FreeOnTerminate:=true;
   Suspended:=false;
 end;
end;

end.


Brother   (2005-11-07 05:52:00) [2]

или sleep итд тут не причем? Тогда зачем
sleep(200);
application.processmessage;
вообще писать?


Brother   (2005-11-07 05:50:00) [3]

что то меня этот цикл напрягает. А не так ли надо?

for i:=1 to 100 do
begin
label1.caption:=FloatToStr(i);
sleep(200);
application.processmessage;
end;


Toxa_ua   (2005-11-07 02:32:00) [4]

Можно в обеих циклах попробовать поставить метки перехода GoTo. В 1-м цикле после выполнения необходимых операций написать GOTO2. И аналогично во 2-м написать GOTO1. И эти циклы будут эмулировать одновременное выполнение.


ant_   (2005-11-07 01:47:00) [5]

Удалено модератором
Примечание: Наездов не надо


SergP   (2005-11-06 22:33:00) [6]

Удалено модератором
Примечание: Офтопик и автор извинился за свой язык


Anatoly Podgoretsky   (2005-11-06 20:08:00) [7]

Циклы могут работать только поочередно, для паралельного исполнения нужны потоки.
В цикле обрабатывать глобальный флаг и делать break


Наверх

Титульная страница Поиск, карта сайта Написать письмо