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

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

TThread [D6, Win2k]


Страницы:   1 2

Alibaba ©   (2003-08-20 18:39:00) 

Народ, помогите, не могу перезапустить поток.

1 Шаг.
constructor TM1Depend.Create;
begin
...
FreeOnTerminate:=False; //По окончанию не разрушается
inherited Create(True); //Создаем поток c ожиданием. Запуск: Resume

end;

2. Шаг
M1Depend.Resume;

3. Шаг
Обрабатываю результат

4. Шаг
M1Depend.Resume; НЕ РАБОТАЕТ!!!


Polevi   (2003-09-01 15:58:00) [21]

это не важно, главное что супер :)


Digitman   (2003-09-01 15:45:00) [22]


> Alibaba


только подход такой (с Suspend и Resume) все равно есть и остается проктологическим)


Alibaba   (2003-09-01 12:14:00) [23]

>Digitman © (21.08.03 10:40) [4]

Спасибо. Все работает супер.
И каждый раз создавать поток ненадо!


Alibaba   (2003-08-22 12:07:00) [24]

>Digitman © (21.08.03 10:40) [4]

Счас попробую....


Digitman   (2003-08-21 10:40:00) [25]


> Похоже, придется каждый раз создавать/удалять поток.


совершенно необязательно

возможный вариант :

procedure TM1Depend.Execute;
begin
while not Terminated do
begin
// здесь - вычисления и формирование результата
Suspend; // очередное дело сделано - можно чуток поспать, пока не разбудят извне
end;
end;

1 Шаг.
constructor TM1Depend.Create;
begin
...
// FreeOnTerminate:=False; //это св-во = False по умолчанию
inherited Create(True); //Создаем поток c ожиданием. Запуск: Resume

end;

2. Шаг
// передаем параметры для очередных вычислений в объект-поток
M1Depend.Resume; // разбудим поток - нехай считает

3. Шаг
// ждем результата , факт их наличия - Suspended = True
Обрабатываю результат

4. Шаг
// передаем другие параметры для очередных вычислений в объект-поток

M1Depend.Resume; // разбудим поток - нехай считает снова

5. Шаг
// ждем очер.результата , факт их наличия - опять же Suspended = True
Обрабатываю результат

6. Шаг
// командуем потоку - все, хватит, закругляйся !

M1Depend.Terminate; // собственно - команда
M1Depend.Reasume; // разбудим поток, первое что он сделает - проверит, не скомандовали ли ему флагом Terminated закруглиться
M1Depend.WaitFor; // ждем, пока поточная ф-ция завершится
M1Depend.Free; // собственно разрушаем отработавший объект M1Depend, управлявший поточной ф-цией


panov   (2003-08-21 10:36:00) [26]

Ты ведь не описал свою задачу.
Поэтому других решений никто пока предложить не может.


Alibaba   (2003-08-21 10:21:00) [27]

Похоже, придется каждый раз создавать/удалять поток.


jack128   (2003-08-20 21:19:00) [28]


> 3. Шаг
> Обрабатываю результат

Раз обрабатываешь результат, то поток уже отработал...

> 4. Шаг
> M1Depend.Resume; НЕ РАБОТАЕТ!!!

Естественно, поток то уже завершился...
FreeOnTerminate:=False; говорит о том, что объект Дельфей Tthread не будет разрушен, а вот объект Windows - thread уничтожается, как только он(поток) отработает...


Страницы:   1 2

Наверх

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