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

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

Как запустить цикл и не дожидаться его завершения? [D7, WinXP]


Страницы:   1 2

Andrey.Ru ©   (2006-10-26 23:33:00) 

Доброго времени суток Мастера!

 У меня вопрос. Скажем есть кусок кода, типа :

var
 Fl : boolean;

procedure MeProcedure;
 begin
   Fl := .......
   ..............
   while Fl do
     begin
        //Цикл почти бесконечный
     end;
  ......
  ......
  ......
 end;
 

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


DiamondShark   (2006-10-28 20:50:00) [1]


> Дело в том что данный цик это собственно сердце монго приложения

У приложений (обычно) уже есть такое сердце -- цикл выборки сообщений.
Сильно подозреваю, что можно использовать его, например, обрабатывая Application.OnIdle


C@N   (2006-10-28 18:53:00) [2]

Timer.... собственный захотел написать.... )))) вперед ))))


RASkov   (2006-10-28 01:33:00) [3]

а лучше не нужно... а если еще и UI есть....


Gydvin   (2006-10-27 23:08:00) [4]

можно запустить конечно два цикла с AProcessMessages'сами в каждом, но при обработке второго цикла первый будет останавливаться и ждать завершения второго, а значит отсюда вывод - позвать Петю


RASkov   (2006-10-27 23:00:00) [5]

> [18] Krants   (27.10.06 12:52)

Мне кажется сообщения в [18] здесь вообще не причем.....имхо.
Тогда уж типа так(если с сообщениями):

while Fl do
begin
 //Цикл почти бесконечный
 ...
 if not MyProcedureBool then //"not run"
 if not run2cikl then begin
  SendMessage(Handle,WM_MYUSER,0,0);
  Application.ProcessMessages;
 end
end;

и в обработчике этого сообщения циклить....вообщем бред какой-то.
И вообще... охота два одновременно работающих цикла... и НЕ охота использовать потоки.... Непонятка. См [17]


Krants   (2006-10-27 12:52:00) [6]

Если сами процедуры в цикле не очень матерые можно так:

...
  while Fl do
    begin
       //Цикл почти бесконечный
       ...
       if not MyProcedureBool then //"not run"
       MyProcedure;
       Application.ProcessMessages;
    end;

Ну разумеется будет работать если MyProcedure имеет свой цикл в который также можно впихнуть Application.ProcessMessages.

Хотя чем тебя поток не устраивает?!


StriderMan   (2006-10-27 11:05:00) [7]

эээ может таймером можно все решить?


ЮЮ   (2006-10-27 03:07:00) [8]


> У меня цикл 1, и его нужно стартануть, а потом сразуже выполнять
> все остальное.


Это что самоцель - стартануть цикл 1? Почему не выполнять то что в цикле1 дальше - в коде, который ты и хочешь выполнять? Например:

doA := true;
doB := true;
while doA or doB do begin
 if doA then ...
 if doB then ..
end;  


MsGuns   (2006-10-27 00:34:00) [9]

>Andrey.Ru   (27.10.06 00:17) [13]
>У меня цикл 1, и его нужно стартануть, а потом сразуже выполнять все остальное.

Короче, начать, не дожидаясь конца цикла ? ;)

Это можно, конечно, но есть некоторые осложнения ;)))


Anatoly Podgoretsky   (2006-10-27 00:26:00) [10]

Зачем же тогда спрашиваешь


> Как запуститьцикл и не дожидатьсяего завершения?

Что ты хочешь, сформулируй вопрос, я лично запустил не дожидаясь его завершения.


Andrey.Ru   (2006-10-27 00:17:00) [11]


> Anatoly Podgoretsky ©   (27.10.06 00:10) [11]
> Просто, типовая конструкция такая:
>
> for I := a to b do
>  for J := c to d   // не дожидаемся окончания цикла I


Это ты о чем? Ты походу не понял. У меня цикл 1, и его нужно стартануть, а потом сразуже выполнять все остальное.


Leonid Troyanovsky   (2006-10-27 00:13:00) [12]


> Andrey.Ru   (27.10.06 00:03) [9]

> запускаю, так просто проще чем класс описывать и плодить
> еще строки текста..


RTFM: Delphi help. TThreadFunc type

--
Regards, LVT.


Anatoly Podgoretsky   (2006-10-27 00:10:00) [13]

Просто, типовая конструкция такая:

for I := a to b do
 for J := c to d   // не дожидаемся окончания цикла I


Ketmar   (2006-10-27 00:10:00) [14]

вот блин. я уже написал язвительный пост, а ветку уволокли в "начинающим"... %-(


Andrey.Ru   (2006-10-27 00:03:00) [15]


> Kolan ©   (26.10.06 23:59) [8]
> > Так пробывал, не катит чето...
>
> Изучи класс TThread. Читай Тексейра и Пачеко.


С классом TThread я знаком... Какая разница как я поток запускаю, так просто проще чем класс описывать и плодить еще строки текста..


Kolan   (2006-10-26 23:59:00) [16]

> Так пробывал, не катит чето...

Изучи класс TThread. Читай Тексейра и Пачеко.


Kolan   (2006-10-26 23:58:00) [17]

> Application.ProcessMessages?

Ну и что будет? Человек с лопатой будет еще и рисовать картину Репина "приплыли" вместо перекура :)


Andrey.Ru   (2006-10-26 23:58:00) [18]


> Leonid Troyanovsky ©   (26.10.06 23:47) [5]
>
> > Andrey.Ru   (26.10.06 23:33)  
>
> >  Как мне можно запустить подобный цикл не используя потоки
> > так, чтобы не ждать его завершения, а продолжать выполнять
>
> > тот который идет ниже?
>
>
> Вынести оный цикл в отдельное приложение.
>
> --
> Regards, LVT.


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

var
 Fl : boolean;
 ThwID, th : cardinal;

procedure MeWhile; stdcall;
 begin
    while Fl do
    begin
       //Мой цикл
    end;
 end;

procedure MeProcedure;
begin
  Fl := .......
  ..............
  ThwID := BeginThread(nil, 1024, @MeWhile, nil, 0, th);
 ......
 ......
 ......
end;


Так пробывал, не катит чето... (( Поэтому и спросил как без потока зделать.


Leonid Troyanovsky   (2006-10-26 23:47:00) [19]


> Andrey.Ru   (26.10.06 23:33)  

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


Вынести оный цикл в отдельное приложение.

--
Regards, LVT.


Орион   (2006-10-26 23:40:00) [20]

эм... а Application.ProcessMessages?


Страницы:   1 2

Наверх

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