Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

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

 
Andrey.Ru   (2006-10-26 23:33) [0]

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

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

var
 Fl : boolean;

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

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


 
Kolan ©   (2006-10-26 23:37) [1]

Скажи если ты копаещь яму №1 как тебя заставить выкапать яму №2 не дожидаясь пока ты докапаещь №1?
1. Никак.
2. Не докопав яму №1 ты прейдешь к следующей. Аналог Break;
3. Позвать Васю и вы будите копать вместе. Это доп. поток


 
Andrey.Ru   (2006-10-26 23:39) [2]

Спасибо, я так и думал ))


 
Ketmar ©   (2006-10-26 23:40) [3]

и чего в "основную" полез? щаз запинаем.


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

эм... а Application.ProcessMessages?


 
Leonid Troyanovsky ©   (2006-10-26 23:47) [5]


> Andrey.Ru   (26.10.06 23:33)  

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


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

--
Regards, LVT.


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


> 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;


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


 
Kolan ©   (2006-10-26 23:58) [7]

> Application.ProcessMessages?

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


 
Kolan ©   (2006-10-26 23:59) [8]

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

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


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


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


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


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

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


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

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

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


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


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

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


RTFM: Delphi help. TThreadFunc type

--
Regards, LVT.


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


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


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


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

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


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

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


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

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

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

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


 
ЮЮ ©   (2006-10-27 03:07) [16]


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


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

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


 
StriderMan ©   (2006-10-27 11:05) [17]

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


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

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

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

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

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


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

> [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]


 
Gydvin ©   (2006-10-27 23:08) [20]

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


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

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


 
C@N ©   (2006-10-28 18:53) [22]

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


 
DiamondShark ©   (2006-10-28 20:50) [23]


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.044 c
15-1161746724
brother
2006-10-25 07:25
2006.11.12
Новшество на форуме...


15-1161777967
novice_man
2006-10-25 16:06
2006.11.12
Поиск нормативных документов.


15-1161775535
Сергиус
2006-10-25 15:25
2006.11.12
настройка EDGE


15-1161493938
pkm
2006-10-22 09:12
2006.11.12
Восстановление инфы.


2-1161891213
Andrey.Ru
2006-10-26 23:33
2006.11.12
Как запустить цикл и не дожидаться его завершения?