Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.042 c
6-1150659710
h8394E
2006-06-18 23:41
2006.11.12
WinSock 2.0 - чтение данных клиентом...


2-1161933177
_guest_
2006-10-27 11:12
2006.11.12
Можно ли послать сообщение компоненту не имеющему свойства Handle


1-1159106424
fs_more
2006-09-24 18:00
2006.11.12
Передача данных в сообщении (SendMessage / PostMessage)


2-1161872990
Riply
2006-10-26 18:29
2006.11.12
Последовательный доступ к памяти


1-1159543009
McFalu
2006-09-29 19:16
2006.11.12
Работа с CreateDIBSection





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский