![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запустить цикл и не дожидаться его завершения? [D7, WinXP]
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?